我有一个使用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
并使用其getLineNumber
和getColumnNumber
方法。