我有一个使用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方法。

08-18 15:23
查看更多