2017-11-07 7 views
0

ほとんどの例では、xpathを渡して特定のノード値を返すevaluateメソッドを使ってxmlドキュメントを呼び出すjavascriptを用意しています。 xpathに一致するノード値のすべての親要素を取得する必要があります。例えばのためにjavascriptを使用してxml内の一致するノード値のすべてのノードを取得するにはどうすればよいですか?

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 = "https://stackoverflow.com/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を書き込む方法。 私は[ '1' ID =] * //しようとしたが、それは私がまた私が推測

<users></users> 

答えて

0

を含める必要が

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

を返し、あなたはgetElementsByTagNameので返されるコレクションから反復処理する必要がありますあなたの値と比較して項目をフィルタリングします。

+0

私はそれを行うことができます。しかし、私はforループ内のifおよびelse条件と同じ機能を持っています。だから、forループの前にxmlをフィルタリングする必要があります。だから、私はvarノード= xml.evaluate(パス、XML、null、XPathResult.ANY_TYPE、null)を使用すると思った。 xmlDoc.documentElement.getElementsByTagName( "user")の代わりに です。 – user2459457

関連する問題