XPathは今ではJSONが非常に人気があるため、今ではめったに使用されていません。ただし、XMLがデータ交換形式であった時代には、大規模なXMLドキュメント構造にランダムにアクセスしたときにXPathが非常に重要な位置を果たしました。おそらく、多くの人々は、DOMレベル3 XPathで指定されたインターフェイスがFirefox、Safari、Chrome、およびOperaによって実装されていることに気付いていません。彼らが実装するコアインターフェイスはXpathevaluatorで、Xpath式で動作できるいくつかの方法が含まれています。最も重要な方法はevaluate()です。これは、5つのパラメーター1.xpath Query文字列2を受け入れることができます。Xpathクエリ文字列は3から開始するノードを示します。名前空間パーサー(後で導入)4。結果タイプ5を返します。
主に10種類のリターンタイプがあります。それぞれがXpathResultオブジェクトの定数を表します。
多くの紹介の後、これらのAPIを使用して動作するにはどうすればよいですか?
evaluate()関数によって返される情報は、要求された結果タイプに完全に依存します。
XPathクエリを実行するには、Xpathevaluatorオブジェクトを使用する必要があります。新しいオブジェクトを生成するか、内蔵オブジェクトを使用できます。新しいオブジェクトを生成する場合、Xpathevaluatorを初期化する必要があります。
var evaluator = new Xpathevaluator(); //最初のdiv var result = evaluator.evaluate( "// div"、document.documentlement、null、xpathresult.first_ordered_node_type、null)を取得します。 alert( "first div id is" + result.singlenodevalue.id);
Firefox、Safari、Chrome、およびOperaでは、すべてのドキュメントインスタンスがXpathevaluatorインターフェイスを実装しています。このようにして、クエリがHTMLページで実行されている場合、document.evaluate()を使用できます。 XMLドキュメントがXMLHTTPREQUESTまたはその他のメカニズムを介して取得された場合、Evaluate()メソッドも使用できます。
// first div var result = document.evaluate( "// div"、document.documentlement、null、xpathresult.first_ordered_node_type、null); alert( "first div id is" + result.singlenodevalue.id);
以下は、複数のノードを返す2つの方法です。最初に例を見てみましょう。
//すべてのdivを取得-iteratorスタイルvar result = document.evaluate( "// div"、document.documentelement、null、xpathresult.ordered_node_iter_terator_type、null); if(result){var node = result.iteratenext(); while(node){alert(node.id); node = node.iteratenext(); }} //すべてのdivを取得 - スナップショットスタイルvar result = document.evaluate( "// div"、document.documentlement、null、xpathresult.ordered_node_snapshot_type、null); if(result){for(var i = 0、len = result.snapshotlength; i <len; i ++){alert(result.snapshotitem(i).id); }}名前空間
XPathを使用してHTMLドキュメントでクエリするだけの場合、evaluate()の名前空間パーサーパラメーターは一般にnullです。 XPathを使用して名前空間を含むXMLドキュメントでクエリする傾向がある場合は、名前空間パーサーの作成と使用方法を学ぶ必要があります。
デフォルトの名前空間に加えて、各名前空間URIは指定されたプレフィックスにマッピングされます。各名前空間リゾルバーは、XPathエンジンの名前空間プレフィックスと名前空間URIをマッピングするために使用されます。名前空間リゾルバーを生成するには、2つの方法があります。 1つ目は次のとおりです。名前空間プレフィックスをパラメーターとして受け入れるメソッドを作成し、次のように対応するURLを返します。
関数Resolver(frefix){switch(prefix){case "wrox":return "http://www.wrox.com/";ケース "NCZ": "http://www.nczonline.net/"を返します。デフォルト:「http://www.yahoo.com/」を返します。 }}2番目のタイプは、名前空間情報を含むノードを使用して、名前空間リゾルバーを生成します。
<books xmlns:wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox:book> professional javascript </book> </book>
<books>要素には、すべての名前空間情報が含まれています。このノードへの参照をXpathevaluatorオブジェクトのCreatensResovler()メソッドに渡すことができ、名前空間リゾルバーを自動的に取得できます。
のように:
var evaluator = new Xpathevaluator(); var Resolver = evaluator.creatensResolver(xmldoc.documentlement);
上記の方法のいずれかを使用すると、名前空間を含むXMLドキュメントで簡単にクエリすることができます。
var evaluator = new Xpathevaluator(); var Resolver = evaluator.creatensResolver(xmldoc.documentlement); var result = evaluator.evaluate( "wrox:book"、xmldoc.documentlement、resolver、xpathresult.first_ordered_node_type、null); if(result){alert(result.singlenodevalue.firstchild.nodevalue); }注:名前空間を含むXMLドキュメントでクエリを実行し、名前空間パーサーを提供しないと、エラーが発生します。
IEブラウザのXPathのサポート
IE8は、DOMレベル3 XPathで定義されているインターフェイスをまだ実装していませんが、XPathの特定のサポートもあります。 IEのXPath関数は、主にXMLドキュメントで利用可能であり、ドキュメントオブジェクトでは使用できません。
IEでXMLドキュメントを生成する方法:
function createdocument(){if(typeof arguments.callee.activexstring!= "string"){var versions = ["msxml2.6.0"、 "msxml2.domdocument.3.0"、 "msxml2.domdocument"]; for(var i = 0、len = versions.length; i <len; i ++){try {var xmldom = new ActiveXObject(versions [i]); arguments.callee.activexstring = versions [i]; xmldomを返します。 } catch(ex){// skip}}} new ActiveXObject(arguments.callee.activexstring); }ドキュメントオブジェクトを生成した後、loadxml()メソッドを使用してコンテンツをロードできます。
var xmldoc = createdocument(); xmldoc.loadxml( "");
2番目の方法は、XMLHTTREQUESTオブジェクトを介してXMLオブジェクトを生成します。
var xhr = new xmlhttprequest()、xmldoc; xhr.open( "get"、 "data.xml"、true); xhr.oneadystatechange = function(){if(xhr.readystate == 4){if(xhr.status> = 200 && xhr.status <300){xmldoc = xhr.responsexml; }}; xhr.send(null);3番目の方法は、<xml>タグを使用することです。 Microsoftは次のように、この方法XML Data Islandを呼び出します。
<xml id = "myxml" src = "data.xml"> </xml>
それから:
var xmldoc = document.getElementById( "myxml")。xmldocument;
XPathサポート:
IEのXMLドキュメントオブジェクトにXPathをサポートするための2つの組み込みの方法があります。
SelectSinglenode()およびSelectNodes()では、各メソッドはXPath式をパラメーターとして受け入れ、最初の一致するノードとすべての一致するノードをそれぞれ戻します。
名前空間サポート:
のために
<books xmlns:wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox:book> professional javascript </book>
</books>このXMLドキュメントでは、次の方法を使用してクエリする必要があります。つまり、最初にsetProperty()を使用してXMLドキュメントの名前空間を設定する必要があります。
xmldoc.setProperty( "SelectionNamesSpaces"、 "xmlns:wrox = 'http://www.wrox.com/' xmlns = 'http://www.amazon.com/'"); var book = xmldoc.documentlement.selectsinglenode.