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