从具有VTD的元素获取行号

时间:2017-06-12 14:27:34

标签: java xml xml-parsing line-numbers vtd-xml

我决定使用VTD-Xml来解析一个非常大的文件。它工作得很好,但在解析过程中,可以进行验证检查,必须使用已验证字段(行和列)的位置进行记录。我找不到任何方法来获取至少使用VTD的元素的行号。我无权访问VTD的源代码,以便检查VTDGen的实现。

有人可以帮助我,或者使用示例代码,或者至少解释一下如何获取行号?我可以在解析过程中随时访问VTDNav和Autopilot。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这是VTDGen中的一个小程序,用于执行行号报告...希望这可以帮助您找到行#。请注意,os是文档中的偏移量。

private String formatLineNumber(int os) {
    int so = docOffset;
    int lineNumber = 0;
    int lineOffset = 0;

    if (encoding < FORMAT_UTF_16BE) {
        while (so <= os-1) {
            if (XMLDoc[so] == '\n') {
                lineNumber++;
                lineOffset = so;
            }
            //lineOffset++;
            so++;
        }
        lineOffset = os - lineOffset;
    } else if (encoding == FORMAT_UTF_16BE) {
        while (so <= os-2) {
            if (XMLDoc[so + 1] == '\n' && XMLDoc[so] == 0) {
                lineNumber++;
                lineOffset = so;
            }
            so += 2;
        }
        lineOffset = (os - lineOffset) >> 1;
    } else {
        while (so <= os-2) {
            if (XMLDoc[so] == '\n' && XMLDoc[so + 1] == 0) {
                lineNumber++;
                lineOffset = so;
            }
            so += 2;
        }
        lineOffset = (os - lineOffset) >> 1;
    }
    return "\nLine Number: " + (lineNumber+1) + " Offset: " + (lineOffset-1);
}