Java XML解析和原始字节偏移

Bil*_*yer 9 java xml parsing sax jaxb

我想将一些格式良好的XML解析为DOM,但我想知道原始媒体中每个节点标记的偏移量.

例如,如果我有一个XML文档,其内容类似于:

<html>
<body>
<div>text</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我想知道节点从原始媒体中的偏移13开始,并且(更重要的是)"文本"从偏移18开始.

这是否可以使用标准Java XML解析器?JAXB?如果没有容易获得的解决方案,那么在解析路径上需要进行哪些类型的更改才能实现这一点?

ska*_*man 6

SAX API 为此提供了一种相当晦涩的机制——接口org.xml.sax.Locator。当您使用 SAX API 时,您可以将其子类化DefaultHandler并传递给 SAX 解析方法,并且 SAX 解析器实现应该将 a 注入Locator到您的DefaultHandlervia中setDocumentLocator()。随着解析的进行,您的各种回调方法ContentHandler将被调用(例如startElement()),此时您可以查阅 来Locator找出解析位置(通过getColumnNumber()getLineNumber()

从技术上讲,这是可选功能,但 javadoc 表示“强烈鼓励”实现提供它,因此您可以假设 JavaSE 中内置的 SAX 解析器会执行此操作。

当然,这确实意味着使用 SAX API,这没有人觉得有趣,但我看不到使用更高级别的 API 访问此信息的方法。

编辑:找到这个例子