XML Object über Ajax - Zugriff auf xpath
Kermit
- javascript
Hi,
wie kann man mit xPath ein Attribut aus ein XML Objekt auslesen?
Ich lade per Ajax ein XML Object. Anschließend möchte ich ein Attribut daraus lesen:
onSuccess: function(transport){
var xDoc = transport.responseXML
alert( 'bsp1:'+xDoc.selectSingleNode("/XRF/A") );
alert( 'bsp2:'+xDoc.selectSingleNode('/XRF/A').getAttribute('v') );
}
Funktioniert alles nicht.
Kann mir jemand mit ein Beispiel helfen?
Vielen Dank
Kermit
Kann mir bei dieser Thema wirklich keiner helfen?
n'abend,
wie kann man mit xPath ein Attribut aus ein XML Objekt auslesen?
XPath, auch wenn ein Standard, ist nicht unbedingt überall verfügbar. Und wer es zur Verfügung stellt, macht es grundsätzlich anders als alle anderen.
Ein wenig googlen hätte dir beispielsweise JS XPath oder JavaScript XPath gezeigt, welche dich vielleicht bei deinem Vorhaben unterstützen könnten.
Ansonsten kannst du (zumindest) mal bei Mozilla vorbei schauen Introduction to using XPath in JavaScript, MSDN (Microsoft Developer Network) kennt im ActiveX Object Msxml.DOMDocument ebenfalls etwas XPathiges.
weiterhin schönen abend...
selectSingleNode ist IE-spezifisch. Folgendes funktioniert im IE problemlos:
<!DOCTYPE html>
<script>
[code lang=javascript]var xhr = new XMLHttpRequest;
xhr.onreadystatechange = readyStateHandler;
xhr.open("GET", "beispiel.xml?" + new Date().getTime(), false);
xhr.send(null);
function readyStateHandler () {
if (xhr.readyState == 4) {
var doc = xhr.responseXML;
alert(doc.selectSingleNode("//XRF/A").getAttribute("v"));
}
}
</script>[/code]
beispiel.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<XRF>
<A v="bla" />
</XRF>
Wenn du nicht weiterkommst, dann sage uns zumindest, was deine Debug-Ausgaben ergeben.
Hilfreiche Debug-Ausgaben:
alert(doc);
alert(doc.documentElement);
alert(doc.documentElement.nodeName);
alert(doc.selectSingleNode("//*"));
Ist dein XML-Dokument wohlgeformt?
Mathias
Danke euch alle. Nach etliche Versuche bin ich endlich am Ziel :-)
Damit geht es:
var xDoc = transport.responseXML;
var xpathResult = xDoc.evaluate("/XRF/A/@v", xDoc, null, XPathResult.ANY_TYPE , null);
alert( 'xpathResult:'+xpathResult );
alert( 'xpathResult.resultType:'+xpathResult.resultType );
alert( 'xpathResult.iterateNext().textContent:'+xpathResult.iterateNext().textContent );