我决定使用VTD-Xml来解析一个非常大的文件。它工作得很好,但在解析过程中,可以进行验证检查,必须使用已验证字段(行和列)的位置进行记录。我找不到任何方法来获取至少使用VTD的元素的行号。我无权访问VTD的源代码,以便检查VTDGen的实现。
有人可以帮助我,或者使用示例代码,或者至少解释一下如何获取行号?我可以在解析过程中随时访问VTDNav和Autopilot。
非常感谢您的帮助。
答案 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);
}