spring的xml解析校驗,有兩種方式。
第一種,是在xml裏指定對應的標籤空間命名,這個校驗主要的作用就是爲了提醒我們在寫入時候應該注意的事項。
第二種,是解析的時候,使用代碼解析,這時候的解析是必要的,因爲如果沒有這時候的解析,會導致沒有按照你規定格式xml也能被解析,從而導致程序出錯。
使用代碼解析案例:
使用代碼校驗有兩種方式,一個是針對document類型
下面這個是scheam的校驗,使用該校驗就要啓用SchemaFactory來創建一個Scheam對象
以spring的beans和contexts的校驗爲例
/**
* 提供驗證,驗證beans的
*/
URL beansUrl=new URL("http://www.springframework.org/schema/beans/spring-beans-3.2.xsd");//這個代表的校驗文件
String beansPublicId="http://www.springframework.org/schema/beans";//這個是命名空間標識符
InputSource so1=new InputSource(beansUrl.openStream());
so1.setSystemId(beansPublicId);
so1.setSystemId(systemId);
Source beansSource=new SAXSource(so1);
/**
* 提供驗證,驗證Context的
*/
URL contextUrl=new URL("http://www.springframework.org/schema/context/spring-context-3.2.xsd");
String contextPublicId="http://www.springframework.org/schema/context";
InputSource contextSo=new InputSource(contextUrl.openStream());
contextSo.setEncoding("UTF-8");
contextSo.setPublicId(contextPublicId);
Source contextSource=new SAXSource(contextSo);
/**
* 將合成的校驗組成一個數組,放入到校驗集合裏
*/
Source[] sources={beansSource,contextSource};
/**
* 創建一個約束工廠,java提供了多個,因此需要選取一個,我們使用的w3c
*/
SchemaFactory sf=SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
/**
* 將資源注入到校驗器
*/
Schema schema=sf.newSchema(sources);
接下來要創建解析器了,無論是SAX形式的,還是Document形式的,都必須要要執行一個代碼,以jaxp提供的dom解析爲例
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
/**
* 如果是使用scheam,這一行是必須要開啓的,表示支持命名空間
*/
documentBuilderFactory.setNamespaceAware(false);
/**
* 這一行代碼無需開啓,如果開啓的話,會和scheam形式衝突,因爲該模式支支持DTD模式的校驗
*/
documentBuilderFactory.setValidating(true);
/**
* 將scheam注入即可
*/
documentBuilderFactory.setSchema(schema);