Java XML 解析和原始字节偏移量

标签 java xml parsing jaxb sax

我想将一些格式良好的 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/

相关文章:

java - Java 是 "pass-by-reference"还是 "pass-by-value"?

java - 方法调用计数断言

java - Eclipse 在 Debug模式下启动时显示无法连接到 VM 错误

xml - 将两个 xml 文件与 xslt 进行比较?

java - 应该使用什么模式来解析 java.util.Date 的 toString 返回的日期字符串?

SQL Server,将具有多行html代码的文本解析为表格

java - ActiveMQ - JDBC 持久化 MySQL : ACTIVEMQ_MSGS is empty

php - 我想在 PHP 中运行 cron 时向现有 XML 添加动态子项

java - 通用图像加载器 imageview 不会使用微调器自行更新

c - 使用 C 中的 MPC 库进行解析仅返回第一个数字