java - 使用 Xerces 解析 XML 文档时是否可以获取当前行号?

标签 java xml xerces line-numbers

我有一个使用 xerces API 解析 XML 文档的 java 程序。

我的解析类扩展了 org.apache.xerces.parsers.XMLDocumentParser,重载了 startElement、endElement、characters 方法。

由于是手写的复杂XML文档(主要是某种配置元素),xsd或dtd的经典验证是不够的,我必须返回给用户XML文档是无效的。

但我无法实现的一件事是在错误消息中添加有关当前正在解析的行号(以及为什么不是列号)的信息以及错误发生的位置。

我认为这是可能的,因为当 XML 文档不是 XML 有效时解析器生成的异常 (org.apache.xerces.xni.parser.XMLParseException) 包含这些信息。

最佳答案

我从来没有用 xerces 尝试过这个,但是 SAX 解析器可以存储 SAX Locator ,您可以在解析文档时(或发生异常后)从中获取行号和列号。

看起来 XMLDocumentParser 可以做同样的事情。它的父类 AbstractXMLDocumentParser 有一个 startDocument传递 XMLLocator 参数的方法。如果覆盖此方法,则可以保存 XMLLocator 并使用其 getLineNumbergetColumnNumber 方法。

关于java - 使用 Xerces 解析 XML 文档时是否可以获取当前行号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/570216/

相关文章:

java - 是否存在类似 Babel 的 Java 编译器?

java - 集合上的线程安全迭代

c# - XPath 查询中的撇号 (')

python: xml.etree.ElementTree,删除 "namespaces"

XML,XSD xs :keyref within recursive complex type defintion

java - 如何在Java中显示输入的星号?

java比较两个日期

xml - XSLT - 在分隔符上分解节点

c++ - Xerces:如何使用 ErrorHandler 检查 XML 文件的有效性

java - 根据 XMLSchema.xsd 验证 XML 架构