【问题标题】:What's the best way to retrieve two pieces of data from an XML file?从 XML 文件中检索两条数据的最佳方法是什么?
【发布时间】:2010-04-05 18:41:38
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java xml xml-parsing


    【解决方案1】:

    虽然 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 了解更多信息。

    【讨论】:

    • 这似乎正是我想要的。将进一步调查。
    • 这完全符合我的要求。感谢您的意见!
    • @Morinar - 除了接受答案之外,我还建议投票
    【解决方案2】:

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


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

    【讨论】:

      【解决方案3】:

      试试"XMLDog"

      这使用 sax 来评估 xpaths

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多