【问题标题】:get line number of xml node in js获取js中xml节点的行号
【发布时间】:2015-05-29 06:45:15
【问题描述】:

我正在尝试验证(自定义规则)xml 源。因此,我使用 document.evaluate 和某个 xpath 解析源并验证结果节点。 如果节点不正确,我想在源代码中给出节点行号错误。

我怎样才能做到这一点?

【问题讨论】:

  • 如果每行只有一个节点,那么就在while循环中跟踪当前行。
  • 一个节点可能会扩展到多行或多个节点可能在一行中。
  • 有谁知道另一个解析器,它为节点提供行号?

标签: javascript xpath evaluation line-numbers


【解决方案1】:

我有类似的问题,我写了一个函数,根据getElementsByTagName 的结果在原始字符串上找到第n 个标签。 是这样的:

function xmlNodeToOriginalLineNumber(element, xmlRootNode, sContent) {
    var sTagName = element.tagName;
    var aNodeListByTag = xmlRootNode.getElementsByTagName(sTagName);
    var iMaxIndex = 0;
    for (var j = 0; j < aNodeListByTag.length; j++) {
        if (aNodeListByTag.item(j) === element) {
            iMaxIndex = j;
            break;
        }
    }
    var regex = new RegExp("<" + sTagName + "\\W", 'g');
    var offset = 0;
    for (var i = 0; i <= iMaxIndex; i++) {
        offset = regex.exec(sContent).index;
    }
    var line = 0;
    for (var i = 0; i < sContent.substring(0, offset).length; i++) {
        if (sContent[i] === '\n') {
            line++;
        }
    }
    return line + 1;
}

我更新了您的示例:https://jsfiddle.net/g113c350/3/

【讨论】:

    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多