我正在寻找使用 Java 应用程序解析各种 XML 文档的最佳方法。我目前正在使用 SAX 和自定义内容处理程序执行此操作,并且效果很好 - 快速且稳定。
我决定探索具有相同程序的选项,该程序当前接收单一格式的 XML 文档,接收两种额外的 XML 文档格式,以及各种 XML 元素更改。我希望根据文档中的第一个“startElement”将 ContentHandler 换成适当的内容处理程序......但是,呃,呃,设置了 ContentHandler,然后解析了文档!
... constructor ...
{
SAXParserFactory spf = SAXParserFactory.newInstance();
try {
SAXParser sp = spf.newSAXParser();
parser = sp.getXMLReader();
parser.setErrorHandler(new MyErrorHandler());
} catch (Exception e) {}
... parse StringBuffer ...
try {
parser.setContentHandler(pP);
parser.parse(new InputSource(new StringReader(xml.toString())));
return true;
} catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
...
所以,我似乎无法以我最初认为的方式做到这一点。
话虽这么说,我认为这完全错误吗?用相同的 XML 处理代码解析多个离散的 XML 文档的最佳方法是什么? 我之前试图在更笼统的帖子中提问……但是,我认为我太含糊了。出于速度和效率的目的,我从未真正关注过 DOM,因为这些 XML 文档相当大,系统每隔几分钟就会收到大约 1200 个。这只是一种信息发送方式
使这个问题太长并增加我的困惑;以下是一些我想要一个 SAX、StAX 或 ?? 的各种 XML 文档的模型。解析器干净地处理。
产品.xml:
<products>
<product>
<id>1</id>
<name>Foo</name>
<product>
<id>2</id>
<name>bar</name>
</product>
</products>
商店.xml:
<stores>
<store>
<id>1</id>
<name>S1A</name>
<location>CA</location>
</store>
<store>
<id>2</id>
<name>A1S</name>
<location>NY</location>
</store>
</stores>
管理器.xml:
<managers>
<manager>
<id>1</id>
<name>Fen</name>
<store>1</store>
</manager>
<manager>
<id>2</id>
<name>Diz</name>
<store>2</store>
</manager>
</managers>