10 Stimmen

xpath mit Dom-Dokument

Ich versuche, einen Xml-Knoten mit einer Xpath-Abfrage zu finden, aber ich kann es nicht zum Laufen bringen. In Firefox Ergebnis ist immer "undefined" und Chrome wirft einen Fehlercode.

<script type="text/javascript">

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');

var result = doc.evaluate('/form/name', doc, 
                          null, XPathResult.ANY_TYPE, null);

alert(result.stringValue);

</script>

Was ist an diesem Code falsch?

13voto

Topera Punkte 11809

Ich weiß nicht, warum Sie diese Fehlermeldung erhalten haben, aber Sie können die XPathResult.ANY_TYPE a XPathResult.STRING_TYPE und wird funktionieren (getestet in Firefox 3.6).

Siehe:

var xmlString = '<form><name>test</name></form>';
var doc = new DOMParser().parseFromString(xmlString,'text/xml');
var result = doc.evaluate('/form/name', doc, null, XPathResult.STRING_TYPE, null);
alert(result.stringValue); // returns 'test'

Siehe in jsfiddle .


DETAILS:

Der 4. Parameter der Methode evaluate ist eine ganze Zahl, bei der Sie angeben, welche Art von Ergebnis Sie benötigen ( Referenz ). Es gibt viele Typen als Integer, String und beliebiger Typ. Diese Methode gibt eine XPathResult das viele Eigenschaften hat.

Sie müssen die Eigenschaft (numberValue, stringValue) mit der in evaluate verwendeten Eigenschaft abgleichen.

Ich verstehe einfach nicht, warum any type funktionierte nicht mit string value .

3voto

Aurimas Punkte 311

XPathResult.ANY_TYPE würde eine Knotenmenge für einen xpath-Ausdruck zurückgeben /form/name also result.stringValue hätte Probleme bei der Konvertierung von Node Set in String. In diesem Fall könnten Sie verwenden result.iterateNext().textContent

Allerdings kann ein Ausdruck wie count(/form/name) würde einen Zahlenwert zurückgeben, wenn es mit XPathResult.ANY_TYPE und Sie könnten result.numberValue um die Nummer in diesem Fall abzurufen.

Ausführlichere Erläuterungen unter https://developer.mozilla.org/en/DOM/document.evaluate#Result_types

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X