2017-02-14 2 views
0

http://www.w3schools.com/xml/tryit.asp?filename=try_xpath_select_cdnodes こんにちは、これは元の例へのリンクです。私はここにコードを貼り付けてコピーします。XPathでのxml.evaluateの使用

<!DOCTYPE html> 
<html> 
<body> 

<p id="demo"></p> 

<script> 
var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
    if (this.readyState == 4 && this.status == 200) { 
     showResult(xhttp.responseXML); 
    } 
}; 
xhttp.open("GET", "books.xml", true); 
xhttp.send(); 

function showResult(xml) { 
    var txt = ""; 
    path = "/bookstore/book/title" 
    if (xml.evaluate) {     // what is this line of code for? 
     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>"; 
     } 
    } 
    document.getElementById("demo").innerHTML = txt; 
} 
</script> 

</body> 
</html> 

私はif(xml.evaluate)文の目的を理解していません。 XPathのブラウザサポートをテストしているようですが、xml.evaluateがtrueまたはfalseを返すかどうかをテストしているようにも見えます。

おかげ

答えて

0

これは2つの目的に役立つ:ためIEの互換性の問題を回避するためにNULL値に対してガードとして

これらのドキュメントを検索すると、わかりやすく見えるhttps://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScriptに届きましたそれ以上。

+0

ありがとうございました。私はあなたの第3のリンクで議論されているように、evaluate()を関数として公正に理解しています。私が理解できないのは、ifステートメント内の使用法です。 –

+0

if(xml.evaluate)が関数またはオブジェクトのプロパティであるかどうか、あるいはこのif文で何が評価されているかはわかりません。 –

+0

カッコを使用しないので、関数の実行ではなく関数の「定義」が返されます。そのようにして、互換性の問題を防ぐのに便利です(第2の箇条書き参照)。 – malarres