考慮啓動的,多模式下的XML文檔(這不是Spring特有的問題,這只是一個例子的方便XML文檔):驗證XML對多個任意模式
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxrs="http://cxf.apache.org/jaxrs"
xmlns:osgi="http://www.springframework.org/schema/osgi"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd
http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd">
我想驗證文檔,但事先並不知道文檔作者將使用哪些命名空間。我相信文檔作者,所以我願意下載任意的模式URL。我如何實現我的驗證器?
我知道我可以用一個DocumentBuilderFactory實例指定我的模式,我的調用setAttribute("http://java.sun.com/xml/jaxp/properties/schemaSource", new String[] {...})
但我不知道模式URL直到文檔被解析。
當然,我可以在解析文檔後自己提取XSD URL,然後通過驗證程序運行它,如上所述指定"http://java.sun.com/xml/jaxp/properties/schemaSource"
,但是肯定已經有一個自動執行的實現?
請注意'setValidating(true)'導致XSD驗證。請參閱https://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#setValidating(boolean)。 – koppor