如何使用javascript获取xml中匹配节点值的所有节点?

时间:2017-11-07 21:59:01

标签: javascript xml xpath

大多数在线示例都有一个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>

1 个答案:

答案 0 :(得分:0)

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