我已经看到了多个与使用woodstox 和JAXB 解析xml 以使用XMLStreamReader
和验证模式解组相关的问题。尽管阅读它们并没有帮助。我需要的是使用本地 DTD 验证传入的 xml 并将整个内容解析为对象表示。传入的 xml 可以有一个包含 DTD 的 DOCTYPE。这需要跳过,而需要使用本地 DTD。实施应该非常快。预计 < 1ms 进行验证和解析。我可以在 5 毫秒内使用以下内容单独解析。合并验证不适用于设置架构(注释的代码行)
xmlif = XMLInputFactory2.newInstance();
xmlif.setProperty(XMLInputFactory2.SUPPORT_DTD, false);
JAXBContext ucontext;
ucontext = JAXBContext.newInstance(XMLOuterElementClass.class);
unmarshaller = ucontext.createUnmarshaller();
/*SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.XML_DTD_NS_URI);
Schema schema = sf.newSchema(new File("c:/resources/schma.dtd"));
unmarshaller.setSchema(schema);*/
XMLStreamReader xsr = xmlif
.createXMLStreamReader(new StringReader(xml));
//xsr = new StreamReaderDelegate(xsr);
long start = System.currentTimeMillis();
try {
while (xsr.hasNext()) {
if (xsr.isStartElement()
&& xsr.getLocalName() == "XMLOuterElementClass") {
break;
}
xsr.next();
}
JAXBElement<XMLOuterElementClass> jb = unmarshaller.unmarshal(xsr,
XMLOuterElementClass.class);
System.out.println("Total time taken in ms :" + (end - start));
} finally {
xsr.close();
}