woodstox と JAXB を使用して xml を解析し、を使用して非整列化し、スキーマXMLStreamReader
に対して検証することに関連する複数の質問を見てきました。私が必要としているのは、着信 xml をローカル DTD で検証し、コンテンツ全体をオブジェクト表現に解析することです。着信 xml には、DTD を含む DOCTYPE を含めることができます。これはスキップする必要があり、代わりにローカル DTD を使用する必要があります。実装は非常に迅速に行う必要があります。検証と解析の実行に 1 ミリ秒未満が予想されます。以下を使用して、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();
}