spider: responseXML Unterschied im IE und FF?

Moin,

ich habe folgendes Problem. Ich würde gern mittels XMLHttpRequest eine lokale XML Datei auslesen. Wenn ich nachfolgende Funktion benutze, liefert "text.getElementsByTagName("Tags")[0].getAttribute("format");" im Internet Explorer 6 nichts zurück. Im Firefox hingegen wird es korrekt angezeigt.

Behandeln IE und Mozilla responseXML unterschiedlich? Ich bin ratlos...

function GET(URI, absPath, FileName) {
        this.req = createXMLHttpRequest();

this.cb = (function() {
          var req = this.req;

if (req.readyState == 4) {

//var text = req.responseText;
            var text = req.responseXML;

var type = text.getElementsByTagName("Tags")[0].getAttribute("format");

createOutput(text, type, absPath, FileName);

}
        }).bind(this);

this.req.onreadystatechange = this.cb;
        this.req.open('GET', uri, true);
        this.req.send(null);
      }

Gruß Spider

  1. hi,

    Ich würde gern mittels XMLHttpRequest eine lokale XML Datei auslesen. Wenn ich nachfolgende Funktion benutze, liefert "text.getElementsByTagName("Tags")[0].getAttribute("format");" im Internet Explorer 6 nichts zurück. Im Firefox hingegen wird es korrekt angezeigt.

    Und wie sieht das XML aus?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Und wie sieht das XML aus?

      <?xml version="1.0" encoding="UTF-16"?>
      <Tags format="ID3" version="2.3">
       <Files>
        <File num="1">cover.jpg</File>
        <File num="3">cover.jpg</File>
       </Files>
       <TPE1>The Artist</TPE1>
       <TPUB>The Publisher</TPUB>
       <TCON>The Genre</TCON>
       <TCOM>The Composer</TCOM>
       <TCOP>The Copyright</TCOP>
       <COMM>The Comment</COMM>
      </Tags>

      1. hi,

        Und wie sieht das XML aus?

        <?xml version="1.0" encoding="UTF-16"?>
        <Tags format="ID3" version="2.3">

        Wenn text.getElementsByTagName("Tags")[0] das Element findet (überprüft?) - funktioniert dann vielleicht der direkte Zugriff auf das Attribut format über
        text.getElementsByTagName("Tags")[0].format
        ?
        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Wenn text.getElementsByTagName("Tags")[0] das Element findet (überprüft?) - funktioniert dann vielleicht der direkte Zugriff auf das Attribut format über text.getElementsByTagName("Tags")[0].format?

          Nein. Das Problem ist, daß text.getElementsByTagName("Tags")[0] kein Objekt ist. Wenn ich "text.getElementsByTagName("Tags").length" schreibe, bekomme ich 0 zurück.

      2. Hallo,

        <?xml version="1.0" encoding="UTF-16"?>

        Benutzt du wirklich UTF-16?! Probiere vielleicht einmal US-ASCII bzw. UTF-8.

        Mathias

  2. Ich habe mich nochmal ein wenig auf die Suche gemacht und bin fündig geworden. Leider gibt es wohl keinen Weg, responseXML im IE zu nutzen. Aber man kann über einen Umweg responseText in ein gültiges XML umwandeln.

    Zuerst erstellt man ein beliebiges Tag, gibt dem eine eindeutige ID und schreibt mit innerHTML den responseText rein. Anschließend häng man das Ganze ins Dokument und entfernt das erstellte Tag wieder.

    function GET(URI, absPath, FileName)
    {
            this.req = createXMLHttpRequest();

    this.cb = (function()
            {
                    var req = this.req;

    if (req.readyState == 4)
                    {

    var xmlDoc = null;
                    var type = null;

    //Wenn es kein IE ist
                    if (document.implementation && document.implementation.createDocument)
                    {
                            xmlDoc = req.responseXML;
                            type = xmlDoc.getElementsByTagName("Tags")[0].getAttribute("format");
                    //Wenn er es ist
                    }
                    else if (window.ActiveXObject)
                    {

    var toAppend = document.createElement('xml');
                            //Packe den responseText in das innerHTML
                            toAppend.setAttribute('innerHTML',req.responseText);

    //Damit man es wiederfindet, eine eindeutige ID
                            toAppend.setAttribute('id','_MakeAUniqueID');
                            //Häng das ganze irgendwo rein
                            document.body.appendChild(toAppend);

    //Suche den XML Zweig anhand der ID und schreib ihn in xmlDoc
                            xmlDoc = document.getElementById('_MakeAUniqueID');
                            type = xmlDoc.getElementsByTagName("Tags")[0].getAttribute("format");

    //Abschließend kann man das Tag auch wieder entfernen
                            document.body.removeChild(document.getElementById('_MakeAUniqueID'));

    }
                    else
                    {
                    //If the browser doesnt support xml
                    alert('Your browser can't handle this script');
                    }

    createOutput(xmlDoc, type, absPath, FileName);

    }
            }).bind(this);
            clear('log');
            this.req.onreadystatechange = this.cb;
            this.req.open('GET', URI, true);
            this.req.send(null);
    }

    Gruß Spider

    1. Hallo,

      Leider gibt es wohl keinen Weg, responseXML im IE zu nutzen.

      Das kann man definitiv, wenn das XML korrekt ist und mit einem entsprechenden MIME-Typ gesendet wird bzw. die lokale Datei eine entsprechende Dateiendung hat. Hast du meinen anderen Tipp probiert?

      Mathias

      1. Hi,

        Das kann man definitiv, wenn das XML korrekt ist und mit einem entsprechenden MIME-Typ gesendet wird bzw. die lokale Datei eine entsprechende Dateiendung hat.

        Hmm, ich fürchte, es wird überhaupt kein MIME-Typ gesendet, denn der Header ist definitv komplett leer. Die Dateiendung lautet .xml

        Hast du meinen anderen Tipp probiert?

        Ja, aber die Änderung hat auch nicht zum Erfolg geführt.