【问题标题】:How to get all nodes for a matching node value in a xml using javascript?如何使用javascript获取xml中匹配节点值的所有节点?
【发布时间】:2017-11-07 21:59:01
【问题描述】:

大多数在线示例都有一个javascript,它使用evaluate 方法调用xml 文档,该方法传递一个xpath 并返回特定的节点值。 我需要在 xpath 中获取匹配节点值的所有父元素。

例如:

user.xml:

<users>
<user>
 <Id>0</Id>
 <Name>Bob</Name>
</user>
<user>
 <Id>1</Id>
 <Name>Keith</Name>
</user>
<user>
 <Id>2</Id>
 <Name>John</Name>
</user>
<users>

javascript:

xhttp=new XMLHttpRequest();
xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            showResult(xhttp.responseXML);
        }
    };
    xhttp.open("GET", "user.xml", false);
    xhttp.send(); 

    function showResult(xml) {
        var txt = "";
        path = "/users/user[Id>0]/Id";
        if (xml.evaluate) {
            var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);

            var result = nodes.iterateNext();

            while (result) {                
                txt += result.childNodes[0].nodeValue + "<br>";
                result = nodes.iterateNext();
            } 
        // Code For Internet Explorer
        } else if (window.ActiveXObject || xhttp.responseType == "msxml-document") {            
            xml.setProperty("SelectionLanguage", "XPath");
            nodes = xml.selectNodes(path);
            for (i = 0; i < nodes.length; i++) {
                txt += nodes[i].childNodes[0].nodeValue + "<br>";
            }
        }           
    }

预期结果:我需要得到类似的 xml(var users= xmlDoc.documentElement.getElementsByTagName("user"); 但基于值过滤)

<users>
<user>
 <Id>1</Id>
 <Name>Keith</Name>
</user>
<user>
 <Id>2</Id>
 <Name>John</Name>
</user>
<users>

由于我没有得到任何答案,我简化了我的问题。

如何编写 xpath 来获取匹配节点的父节点。 我试过 //*[Id='1'],但它返回了

 <user><Id>1</Id>..</user>. 

我还需要包含

 <users></users>

【问题讨论】:

    标签: javascript xml xpath


    【解决方案1】:

    我想,您将不得不从 getElementsByTagName 返回的集合中进行迭代,并与您的值进行比较以过滤掉项目。

    【讨论】:

    • 我能做到。但我有一个与 for 循环中的 if 和 else 条件相同的功能。所以我必须在 for 循环之前过滤 xml。所以我想到了使用 var nodes = xml.evaluate(path, xml, null, XPathResult.ANY_TYPE, null);而不是 xmlDoc.documentElement.getElementsByTagName("user");
    猜你喜欢
    • 2013-04-21
    • 2014-03-11
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多