ma: XMLHttpRequest.responseXML getNamedItem

Hallo,

ich habe ein Porblem: Ich möchte aus einem XML von einem Node das NamedItem auslesen. In diesem Fall hätte ich gerne die values von Coords.

Mit responseText() erhalte ich den kompletten Inhalt. Aber ich würde es gerne mit responseXML() machen.

<CTS_Response version="2.0">
    <SRS name="UTM32"/>
    <Coords values="571583.14398801 5538981.63259982 640242.53359152 5651586.94899194"/>
</CTS_Response>

Das hier ist ein Auzug aus meinem JavaScript Code:

var urlKomplett = "http://sg.geodatenzentrum.de/gdz_cts?REQUEST=GetCoordinates&FROMSRS=GEO_DHDN&TOSRS=UTM32&COORDS=10%2050%2011%2051";
var xmlHttpObject = null;
	if (typeof XMLHttpRequest != 'undefined') 
	{
		xmlHttpObject = new XMLHttpRequest();
		xmlHttpObject.open("GET", urlKomplett, false);
			
		xmlHttpObject.onreadystatechange = function(){
			if(xmlHttpObject.readyState == 4){
				if(xmlHttpObject.status == 200){
					//var doc = xmlHttpObject.responseText;
					//alert(doc);
					var xmlDoc = xmlHttpObject.responseXML;
					var x = xmlDoc.getElementsByTagName("Coords").attributes.getNamedItem("values").nodeValue;
					alert(x);
				}
				else{
						
					alert(xmlHttpObject.statusText);
				}
			}
		}
			
		xmlHttpObject.send(null);
	} else {
		alert("Ihr Browser unterstützt die Ausführung nicht!");
	}

Wäre echt supern wenn mir jemand helfen kann.

  1. Hallo,

    					var x = xmlDoc.getElementsByTagName("Coords").attributes.getNamedItem("values").nodeValue;
    

    hier fehlt die Indizierung:

      var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
    

    Gruß
    Jürgen

    1. Hallo,

      ich Danke dir, aber da bekomme ich dann gar kein Ergebnis. An was kann das liegen?

      1. Tach!

        ich Danke dir, aber da bekomme ich dann gar kein Ergebnis. An was kann das liegen?

        Am nicht ausgeführten Debugging?

        dedlfix.

      2. Hallo

        Hallo,

        ich Danke dir, aber da bekomme ich dann gar kein Ergebnis.

        was heist das? Kein Alert? Leeres Alert? …?

        An was kann das liegen?

        Keine Ahnung. Was steht denn in der Fehlerkonsole?

        Gruß
        Jürgen

        1. Hallo

          Hallo,

          ich Danke dir, aber da bekomme ich dann gar kein Ergebnis.

          was heist das? Kein Alert? Leeres Alert? …?

          An was kann das liegen?

          Keine Ahnung. Was steht denn in der Fehlerkonsole?

          Gruß
          Jürgen

          Die Eigenschaft "getNamedItem" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

  2. Tach!

    var x = xmlDoc.getElementsByTagName("Coords").attributes.getNamedItem("values").nodeValue;

    Wie so oft kann der im Browser eingebaute Debugger helfen, Wunsch und Wirklichkeit miteinader zu vergleichen. Dann könnte man sehen, dass getElementsByTagName("Coords") kein einzelnes Element liefert, sondern sowas wie ein Array - auch wenn da nur ein Element drin ist.

    dedlfix.

    1. ok, danke. Und wie kann ich das Array lesen?

      1. Tach!

        ok, danke. Und wie kann ich das Array lesen?

        Es ist kein Array, nur sowas ähnliches. Aber auch auf das kannst du wie auf ein Array zugreifen, mit [x], wobei x bei 0 zu zählen anfängt.

        dedlfix.

        1. ja so habe ich das jetzt gemacht

          var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
          

          wenn ich dann das hier mache

          alert(X);
          

          erhalte ich kein Ergebnis

          1. Tach!

            wenn ich dann das hier mache

            alert(X);
            

            erhalte ich kein Ergebnis

            Nimm den Debugger! Und dann schau schrittweise, was du für Zwischenergebnisse bekommst.

            dedlfix.

            1. ok das hat schon einmal geholfen. Danke dir. nun bekomme ich beim debuggen diesen Fehler:

              Die Eigenschaft "getNamedItem" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

              in der Zeile:

              var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
              
              1. Tach!

                nun bekomme ich beim debuggen diesen Fehler:

                Die Eigenschaft "getNamedItem" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

                in der Zeile:

                var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
                

                Weiter debuggen. Im Firefox und Chrome ist der Debugger so nett, gleich beim Tippen die möglichen Optionen aufzuzeigen.

                Setz einen Breakpoint auf die Zeile und schreib dann in die Konsole: xmlDoc.getElementsByTagName("Coords") und Enter. Was zeigt es an? Dann die Zeile wieder hochholen und das nächste Stück ergänzen und wieder schauen. Und so weiter.

                Der Null-Verweis kommt von einem Zwischenschritt, der nicht das gewünschte Ergebnis brachte.

                dedlfix.

                1. ok gut.

                  also hier passt noch alles

                  var xmlDoc = xmlHttpObject.responseXML;
                  

                  das XML ist dann in xmlDoc gespeichert Sobald ich es dann hier verwende

                  var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
                  

                  dann heißt es, es sei null

                  1. Tach!

                    xmlHttpObject.responseXML;
                    

                    sobald ich es rein schreiben möchte in xmlDoc, dann ist xmlDoc null

                    Da ist wohl was kaputt. Vielleicht ein falscher Content-Type? Ich weiß nicht, wie empfindlich die Browser da reagieren. Schau mal in den Netzwerk-Teil vom Debugger und da den Request an.

                    dedlfix.

                    1. Tach!

                      xmlHttpObject.responseXML;
                      

                      sobald ich es rein schreiben möchte in xmlDoc, dann ist xmlDoc null

                      Da ist wohl was kaputt. Vielleicht ein falscher Content-Type? Ich weiß nicht, wie empfindlich die Browser da reagieren. Schau mal in den Netzwerk-Teil vom Debugger und da den Request an.

                      dedlfix.

                      sry habe den Beitrag nochmals editiert.

                      1. Tach!

                        sry habe den Beitrag nochmals editiert.

                        Sobald ich es dann hier verwende

                        var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
                        

                        dann heißt es, es sei null

                        Welches "es"? In dem Ausdruck sind davon recht viele enthalten. Wenn also xmlDoc in der Kontrollausgabe noch den erwarteten Inhalt enthält, dann geh schrittweise weiter vor, bis du an die genaue Problemstelle gelangt bist.

                        dedlfix.

                        1. Juhu,

                          habe den Fehler gefunden.

                          xmlHttpObject.onreadystatechange = function(){
                          	if(this.readyState == 4){
                          		if(this.status == 200){
                          	                //var doc = this.responseText;
                          			//alert(doc);
                          			var xmlDoc = this.responseXML;
                          			//var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
                          			var x = xmlDoc.getElementsByTagName("Coords")[0].getAttribute("values");
                          						document.getElementById("rechtswertZiel").innerHTML = x;
                          	
                          

                          Die variable xmlHttpObject verwendet statt this.

                          ICH DANKE EUCH ALLEN

                        2. oh nein,

                          im Fierefox funktioniert es aber im IE 11 nicht.

                          Hast du eine Idee?

                          1. Tach!

                            im Fierefox funktioniert es aber im IE 11 nicht.

                            Hast du eine Idee?

                            Die kurze Antwort: Das liegt garantiert an der Ursache.

                            Die etwas längere Antwort: Erstmal herausfinden, was "funktioniert nicht" konkret bedeutet und dazu den Debugger im Browser bemühen. Dann in der Dokumentation (MSDN) nachschauen, was der IE an der Stelle anders haben möchte.

                            dedlfix.

              2. Hallo ma,

                nun bekomme ich beim debuggen diesen Fehler:

                Die Eigenschaft "getNamedItem" eines undefinierten oder Nullverweises kann nicht abgerufen werden.

                in der Zeile:

                var x = xmlDoc.getElementsByTagName("Coords")[0].attributes.getNamedItem("values").nodeValue;
                

                Warum nicht einfach so mit der naheliegenden Methode getAttribute()?

                var x = xmlDoc.getElementsByTagName("Coords")[0].getAttribute("values");
                
                

                Grüße, Thomas