【问题标题】:How to get the line number an xml element is on via the Java w3c dom api如何通过Java w3c dom api获取xml元素所在的行号
【发布时间】:2011-02-14 09:37:09
【问题描述】:

有没有办法通过 w3c dom api 在 xml 文件中查找给定元素所在的行号?

我的用例是我们有 30,000 多张 kml/xml 格式的地图。我编写了一个单元测试,它遍历硬盘上找到的每个文件(大约 17GB)并测试它是否可以被我们的应用程序解析。当它失败时,我抛出一个异常,其中包含被认为“无效”的元素实例。为了让我们的映射部门(这里没有人知道如何编程)轻松追踪错字,我们希望记录导致异常的元素的行号。

有人可以建议一种方法吗?请注意,我们使用的是 Android 1.6 SDK 中包含的 W3C dom api。

【问题讨论】:

    标签: java android dom w3c kml


    【解决方案1】:

    看起来您正在验证您的 XML 文件。也就是说,您不关心文档在语法上是否正确(“格式正确”),而是它们是否对您的应用程序语义有效。正确的工具是验证 XML 解析器,以及专用的 XML 方案。参见例如this tutorial on XML validation in Java。验证错误通常会包含详细的错误信息,包括问题元素的行号。

    【讨论】:

      【解决方案2】:

      我可能是错的,但只要 XML 结构本身有效,行号就不应该与您的 XML 解析器/阅读器相关。

      假设每个节点/内容必须在不同的行上,您可能会尝试以编程方式推断行号,但这会很棘手。

      【讨论】:

        【解决方案3】:

        我不确定 Android API 是否不同,但是普通的 Java 应用程序可以在 parsing 时捕获 SAXParseException 并查看 line number.

        【讨论】:

        • 我没有使用 SAX,我使用的是 w3c dom api。
        • @Benju - 一个DocumentBuilder 抛出一个SAXException,即使它正在构建一个org.w3c.dom.Document。如果您使用的是 Java 标准版之外的 API,请发布一个链接以进行比较。
        • Dom api 使用 SAX 来解析 xml,所以@erickson 是对的,它会给你一个错误元素的行号。您无法从已解析的 DOM 树中获取元素的行号。
        • XML 是有效的,根据我们的文件格式规范(它只是将信息添加到标准 kml/google-earth 文件),XML 的内容是无效的。
        猜你喜欢
        • 2011-02-08
        • 2015-12-05
        • 1970-01-01
        • 2011-12-26
        • 2016-05-25
        • 2011-09-16
        • 2013-01-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多