从XML文件中检索两个数据的最佳方法是什么?

时间:2010-04-05 18:41:38

标签: java xml xml-parsing

我有一个XML文档,它处于FO之前或之后的转换状态,我需要从中提取一些信息。在前面的情况下,我需要拉出两个代表pageWidth和pageHeight的标签,在后一种情况下,我需要从特定的标签中提取页面高度和页面宽度参数(我忘记了哪一个是关闭的我的头脑。)

我正在寻找的是一种有效/易于维护的方法来抓住这两个元素。我只想一次阅读文档,拿出我需要的两件事。

我最初开始写一些会使用BufferedReader + FileReader的内容,但后来我正在进行字符串搜索,当标签跨越多行时会变得混乱。然后我查看DOMParser,这似乎是理想的,但我不想将整个文件读入内存,如果我能帮助它,因为文件可能很大而且标签我我正在寻找将几乎总是接近文件的顶部。然后我调查了SAXParser,但这似乎是我想要完成的一大堆复杂的过度杀伤。

有人有什么建议吗?或简单的实现,以实现我的目标?感谢。

编辑:我忘了提到由于我的各种限制,无论我使用什么都必须“内置”到核心Java,我不能使用和/或下载任何第三方XML工具。

3 个答案:

答案 0 :(得分:4)

虽然XPath非常适合查询XML数据,但我不知道Java的良好和快速的XPath实现(它们至少都使用DOM模型)。

我建议你坚持使用StAX。即使对于大型文件,它也非常快,而且它的游标API相当简单:

XMLInputFactory f = XMLInputFactory.newInstance();
XMLStreamReader r = f.createXMLStreamReader("my.xml");
try {
  while (r.hasNext()) {
    r.next();
    . . .
  }
} finally {
  r.close()
}

有关详细信息,请参阅StAX tutorialXMLStreamReader javadocs

答案 1 :(得分:1)

您可以使用XPath搜索您的代码。 Here是关于形成XPath表达式的教程。 here是一篇关于在Java上使用XPath的文章。


易于使用的解析器(dom,sax)是dom4j。它比内置的SAXParser更容易使用。

答案 2 :(得分:0)

尝试"XMLDog"

这使用sax来评估xpaths