XPath wird jetzt selten von uns verwendet, weil JSON jetzt sehr beliebt ist. In der Zeit, in der XML jedoch ein Datenaustauschformat war, spielte XPath eine sehr wichtige Position, wenn wir zufällig auf große XML -Dokumentstrukturen zugegriffen haben. Vielleicht haben viele Menschen nicht bemerkt, dass die von DOM Level 3 XPath angegebene Schnittstelle von Firefox, Safari, Chrome und Oper implementiert wurde. Die Kernschnittstelle, die sie implementieren, ist Xpathevaluator, die einige Methoden enthält, die mit XPath -Ausdrücken funktionieren können. Die wichtigste Methode ist evaluate (), mit der fünf Parameter 1.XPATH -Abfragezeichenfolge 2 akzeptiert werden kann. Geben Sie an, welcher Knoten der XPath -Abfragezeichenfolge von 3. NAMPACE -Parser (später eingeführt) beginnen soll. Retyptyp 5. Das zurückgegebene Ergebnis sollte zu diesem Objekt hinzugefügt werden (selten verwendet, da das Ergebnis hauptsächlich durch Evaluierung zurückgegeben wird ().
Es gibt hauptsächlich 10 verschiedene Rückgabetypen. Jedes repräsentiert eine Konstante des XpatheResult -Objekts.
Wie sollten wir nach so viel Einführung diese APIs verwenden, um zu operieren?
Die von der Funktion evaluate () zurückgegebenen Informationen hängen vollständig vom angeforderten Ergebnistyp ab.
Um die XPath -Abfrage auszuführen, müssen Sie das XPathEvaluator -Objekt verwenden. Sie können ein neues Objekt erstellen oder das integrierte Objekt verwenden. Wenn Sie ein neues Objekt generieren, müssen Sie den XPathEvaluator initialisieren.
var Evaluator = new XPathEvaluator (); // das erste div var result = evaluator.evaluate ("// div", document.documentElement, null, xpatheResult.first_ordered_node_type, null); alert ("Erste Div -ID ist" + result.singlenodeDevalue.id);In Firefox, Safari, Chrome und Opera implementieren alle Dokumenteninstanzen die Xpathevaluator -Schnittstelle. Wenn eine Abfrage auf einer HTML -Seite ausgeführt wird, können wir document.evaluate () verwenden. Wenn das XML -Dokument über XMLHTTPREQUEST oder andere Mechanismen erhalten wird, kann auch die Evaluate () -Methode verwendet werden, beispielsweise:
// Erst div var result = document.evaluate ("// div", document.documentElement, null, xpatheResult.first_ordered_node_type, null); alert ("Erste Div -ID ist" + result.singlenodeDevalue.id);Im Folgenden finden Sie zwei Möglichkeiten, mehrere Knoten zurückzugeben. Schauen wir uns zuerst die Beispiele an:
// Alle Divs erhalten - Iteratorstil var result = document.egaluate ("// div", document.documentElement, null, xpatheResult.Ordereded_node_iterator_type, null); if (result) {var node = result.IterateNext (); while (node) {alert (node.id); node = node.IderateNext (); }} // Alle Divs erhalten - Snapshot -Stil var result = document.evaluate ("// div", document.documentElement, null, xpatpatresult.Ordered_node_snapshot_type, null); if (result) {for (var i = 0, len = result.snapshotLength; i <len; i ++) {alert (result.snapShotItem (i) .Id); }}Namespace
Wenn Sie nur XPath in HTML -Dokumenten abfragen, ist der Parameter des Namespace -Parsers in evaluate () im Allgemeinen null. Wenn Sie in der Regel XPath verwenden, um in XML -Dokumenten, die den Namespace enthalten, abzufragen, sollten Sie lernen, wie der Namespace -Parser erstellt und verwendet wird.
Zusätzlich zum Standard -Namespace wird jeder Namespace URI einem angegebenen Präfix zugeordnet. Jeder Namespace Resolver wird verwendet, um das Präfix des Namespace -Präfixes und den Namespace URI für die XPath -Engine zuzuordnen. Es gibt zwei Möglichkeiten, einen Namespace -Resolver zu generieren. Das erste ist wie folgt: Erstellen Sie eine Methode, die ein Namespace -Präfix als Parameter akzeptiert, und gibt dann die entsprechende URL wie folgt zurück:
Funktion Resolver (Präfix) {Switch (Präfix) {case "Wrox": return "http://www.wrox.com/"; Fall "ncz": return "http://www.nczonline.net/"; Standard: zurück "http://www.yahoo.com/"; }}Der zweite Typ verwendet einen Knoten, der Namespace -Informationen enthält, um einen Namespace -Resolver zu generieren.
<books xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: book> professionelles javascript </book> </books>
Das Element <Books> enthält alle Namespace -Informationen. Sie können den Verweis auf diesen Knoten an die Methode createSeSresovler () des XPathEvaluator -Objekts übergeben und dann automatisch einen Namespace -Resolver abrufen.
wie:
var Evaluator = new XPathEvaluator (); var resolver = evaluator.createSeSolver (xmldoc.documentElement);
Unter Verwendung einer der oben genannten Methoden ist es einfach, in einem XML -Dokument mit dem Namespace abzufragen.
var Evaluator = new XPathEvaluator (); var resolver = evaluator.createSeSolver (xmldoc.documentElement); var result = evaluator.evaluate ("Wrox: book", xmldoc.documentElement, resolver, xpatheResult.First_ordered_node_type, null); if (result) {alert (result.singlenodeValue.firstchild.nodeValue); }Hinweis: Wenn Sie eine Abfrage in einem XML -Dokument mit einem Namespace ausführen und keinen Namespace -Parser angeben, tritt ein Fehler auf.
Unterstützung für XPath im IE -Browser
IE8 hat die in DOM Level 3 XPath definierte Schnittstelle noch nicht implementiert, aber auch eine gewisse Unterstützung für XPath. Die XPath -Funktion in IE ist hauptsächlich für XML -Dokumente verfügbar und für Dokumentobjekte nicht verfügbar.
So generieren Sie XML -Dokumente in IE:
Function Createcument () {if (typeof argumente.callee.activeXString! für (var i = 0, len = issusion.length; i <len; i ++) {try {var xmldom = new ActiveXObject (Versionen [i]); argumente.callee.activeXstring = Versionen [i]; Return Xmldom; } catch (ex) {// überspringen}}} return New ActiveXObject (Argumente.Callee.activeXString); }Nach dem Generieren des Dokumentobjekts können Sie die methode loadxml () verwenden, um den Inhalt zu laden:
var xmldoc = createdocument (); xmldoc.loadxml ("");Die zweite Methode erzeugt ein XML -Objekt über das XMLHTTREQUEST -Objekt.
var xhr = neu xmlhttprequest (), xmldoc; xhr.open ("get", "data.xml", true); xhr.onreadyStatechange = function () {if (xhr.readyState == 4) {if (xhr.status> = 200 && xhr.status <300) {xmldoc = xhr.responsexml; }}; xhr.send (null);Die dritte Methode besteht darin, das <xml> -Tag zu verwenden. Microsoft ruft diese Methode XML Data Island wie folgt auf:
<xml id = "myxml" src = "data.xml"> </xml>
Dann:
var xmldoc = document.getElementById ("myxml"). xmldocument;XPATH -Unterstützung:
Es gibt zwei integrierte Methoden zur Unterstützung von XPath in XML-Dokumentobjekten im IE:
SelectSinglenode () und SelectNodes () akzeptiert jede Methode einen XPath -Ausdruck als Parameter und legt dann den ersten passenden Knoten bzw. alle übereinstimmenden Knoten zurück.
Namespace -Unterstützung:
für
<books xmlns: wrox = "http://www.wrox.com/" xmlns = "http://www.amazon.com/"> <wrox: book> professionelles javascript </book>
</books> Für dieses XML -Dokument sollten wir die folgende Methode zur Abfrage verwenden, dh zuerst verwenden setProperty (), um den Namespace des XML -Dokuments festzulegen.
xmldoc.setProperty ("selectionNamePaces", "xmlns: wrox = 'http: //www.wrox.com/' xmlns = 'http: //www.amazon.com/'"); var book = xmldoc.documentelement