4
我有一個schema.xsd
,其中包括並修改XHTML這樣catalog.xml文件的XMLSchema驗證:與實體解決
<xs:redefine schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd">
...
</xs:redefine>
現在我已經寫了一個驗證,這
- 從讀取模式xml文件
- 使用CatalogManager解決實體
它工作正常,因爲它不會加載網絡中的任何文件,而是發現我的catalog.xml
文件中給出的xhtml11.xsd。
public class XmlTemplateValidator implements TemplateValidator
{
public List<SAXParseException> validate (String xml) throws Exception
{
Reader input = new StringReader(xml);
InputSource inputSource = new InputSource(input);
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
parser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema");
XMLReader reader = parser.getXMLReader();
reader.setEntityResolver(new CatalogResolver());
DefaultErrorHandler handler = new DefaultErrorHandler();
reader.setErrorHandler(handler);
reader.parse(inputSource);
return handler.getSaxParseExceptions();
}
}
現在我想同樣的事情,但我想給我的驗證的內部架構(所以不會讓筆者說,針對其架構應該進行驗證,而是讓驗證決定使用哪種模式。
public class NewXmlTemplateValidator implements TemplateValidator
{
static final String schemaSource = "schema.xsd";
public List<SAXParseException> validate (String xml) throws Exception
{
Reader input = new StringReader(xml);
SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
URL schemaUrl = getClass().getResource(schemaSource);
Schema schema = factory.newSchema(schemaUrl);
Validator validator = schema.newValidator();
DefaultErrorHandler handler = new DefaultErrorHandler();
validator.setErrorHandler(handler);
Source source = new StreamSource(input);
validator.validate(source);
return handler.getSaxParseExceptions();
}
}
它的工作原理,但它加載所有XHTML文件形成需要相當長的,而不是我想要的網。
所以我想驗證對適當實體解析預定義模式的XML字符串通過catalog.xml定義。
如何輕鬆地將CatalogResolver添加到第二個設置?