我想将一些格式良好的 XML 解析为 DOM,但我想知道每个节点的标签在原始媒体中的偏移量。
例如,如果我有一个 XML 文档,其内容如下:
<html>
<body>
<div>text</div>
</body>
</html>
我想知道该节点在原始媒体中从偏移量 13 开始,并且(更重要的是)“文本”从偏移量 18 开始。
标准的 Java XML 解析器可以做到这一点吗?贾克斯?如果没有容易获得的解决方案,那么在解析路径上需要进行哪些类型的更改才能使之成为可能?
最佳答案
SAX API 为此提供了一种相当晦涩的机制 - org.xml.sax.Locator
界面。当您使用 SAX API 时,您将 DefaultHandler
子类化并将其传递给 SAX 解析方法,并且 SAX 解析器实现应该将 Locator
注入(inject)您的 DefaultHandler
通过 setDocumentLocator()
。随着解析的进行,将调用 ContentHandler
上的各种回调方法(例如 startElement()
),此时您可以查询 Locator
找出解析位置(通过 getColumnNumber()
和 getLineNumber()
)
从技术上讲,这是可选功能,但 javadoc 表示“强烈鼓励”实现提供它,因此您可以假设内置在 JavaSE 中的 SAX 解析器会执行此操作。
当然,这确实意味着使用 SAX API,这可不是什么有趣的想法,但我看不到使用更高级别的 API 访问此信息的方法。
编辑:发现this example .
关于Java XML 解析和原始字节偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3507350/