java - 使用 VTD 从元素获取行号

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

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

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

非常感谢您提前提供的帮助。

最佳答案

这是 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);
}

关于java - 使用 VTD 从元素获取行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44501913/

相关文章:

Java自动设置按钮名称

java - 从标签 <font color ="red"> 读取文本并通过控制台打印

java - 并行计算集合的所有排列

c# - C#中的XML标签格式问题

xml - 使用 PowerShell 更新 XML 值

sql-server - 级别 : Hard - Extract data from XML in a hierarchy format

java - 使用反射重置枚举单例字段

xml - 使用 XSL 进行解析

java - 如何使用 Java 和 SAX 解析我的简单 XML 文件?

sql - 在 SQL 中将 XML 解析为表(仅具有值的节点)