是否可以获得当前线的数量,在分析XML文件与了xerces?
-
05-09-2019 - |
题
我有一个java程序,该程序分析的一个XML文件使用了xerces API。
我的分析类扩展的组织。apache.了xerces.分析程序.XMLDocumentParser,超载的startElement,endElement、字符的方法。
由于这是一个复杂的XML文件是手写的(主要是某种构成元素),经典的验证文件或dtd是不够的,而我需要回到用户的XML文件是无效的。
但是,1件事,我不可能实现的是增加信息中的错误消息有关的线路数量(和为什么不列数太),目前有其正在分析和错误的发生。
我的东西这可能是可能的,因为例外情况(org.apache.了xerces.xni.分析器。XMLParseException)分析器产生当XML文件是不是XML有效包含这些信息。
解决方案
我从来没有尝试过这种与了xerces,但萨克斯析器可以储存一个萨克斯风 定位器, ,你可以从中得到线和列的数字为该文件分析(或之后的一个例外)。
它看起来像 XMLDocumentParser
可能可以做同样的事情。其父类, AbstractXMLDocumentParser
,有一个 startDocument 方法是通过一个 XMLLocator
参数。如果复盖这种方法,你可以保存 XMLLocator
并使用它 getLineNumber
和 getColumnNumber
方法。
其他提示
不知道“正确”的方法是什么,但看API,假设你提供XMLInputSource这需要一个InputStream或者是包裹着一个class LineNumberInputStream已或LineNumberReader,然后你可以在一个InputStream /读者提供一个阅读器进行查询对于行号。
例如:
InputStream stream; stream = ...; new XMLInputSource(stream);
将变成:
InputStream stream; LineNumberInputStream lineStream; stream = ...; lineStream = new LineNumberInputStream(lineStream); new XMLInputSource(lineStream); // can now ask the line stream what line it is on via getLineNumber()
我猜你也需要在class LineNumberInputStream已/ LineNumberReader传递给你的类,它扩展XMLDocumentParser。
不知道如果所有这一切都在你的代码是可行的。
或者深入到源,并找出他们是如何做到这一点。如果您需要访问的变量/方法是私有的,你不用担心你的代码在将来打破,你可以使用反射和删除访问权限得到它。