Kermit: XML Object über Ajax - Zugriff auf xpath

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

  1. Kann mir bei dieser Thema wirklich keiner helfen?

  2. 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...

    --
    #selfhtml hat ein Forum?
    sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|
  3. 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

    1. 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 );