2

我有一个 XML 文档,它处于 FO 转换前或转换后的状态,我需要从中提取一些信息。在前例中,我需要提取两个代表 pageWidth 和 pageHeight 的标签,在后例中,我需要从特定标签中提取 page-height 和 page-width 参数(我忘记了它不在我的头顶)。

我正在寻找的是一种有效/易于维护的方式来获取这两个元素。我只想一次阅读文档以获取我需要的两件事。

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

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

编辑:我忘了提到,由于我有各种限制,我使用的任何东西都必须“内置”到核心 Java 中,在其中我不能使用和/或下载任何第 3 方 XML 工具。

4

3 回答 3

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 教程XMLStreamReader javadocs

于 2010-04-05T19:15:41.990 回答
1

您可以使用XPath来搜索您的标签。是关于形成 XPath 表达式的教程。这是一篇关于在 Java 中使用 XPath 的文章


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

于 2010-04-05T18:48:11.863 回答
0

试试“XMLDog”

这使用 sax 来评估 xpaths

于 2010-04-05T20:07:29.703 回答