madangel: xml-datei in javascript einlesen (e4x)

ich habe eine xml-datei "blumen.xml" mit dem inhalt:

<?xml version="1.0" ?>
<root>
    <blume>
        <name>Rose</name>
        <preis>1.10</preis>
    </blume>
</root>

und möchte den inhalt der datei in eine xml-variable (in javascript) einlesen um einzelne knoten auszulesen. die "einlesen.html" sieht so aus:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<title>XML laden</title>
</head>
<body>
<script type="text/javascript; e4x=1">
var xmlDoc=new XML();
xmlDoc.load("blumen.xml");
alert(xmlDoc.root);
</script>
</body>
</html>

leider funktioniert es nicht (: ... die firefox-fehlerkonsole gibt immer "xmlDoc.load is not a function" aus.

was mache ich falsch?
bin für jeden hinweis dankbar !!!

  1. Liebe(r) madangel,

    <script type="text/javascript; e4x=1">
    var xmlDoc=new XML();
    xmlDoc.load("blumen.xml");
    alert(xmlDoc.root);
    </script>

    ein kurzes Googlen erweckte in mir den Eindruck, als ob es sich bei new XML() um entweder ein Microsoft-only Feature handelt, oder zu einer der üblichen JavaScript-Bibliotheken gehört. Über beide Möglichkeiten schweigst Du Dich aber tapfer aus...

    Mein Vorschlag: Benutze ein "herkömmliches" XMLHTTPRequest-Objekt, um über die unter dem Modewort "AJAX" bekannten Verfahren an den Inhalt der XML-Datei zu gelangen.

    Was es mit dem Attribut "e4x" in Deinem Script-Tag auf sich hat, interessiert mich auch. Magst Du es mir erklären, oder muss ich selber danach googlen?

    Liebe Grüße,

    Felix Riesterer.

    --
    ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    1. Moin.

      Was es mit dem Attribut "e4x" in Deinem Script-Tag auf sich hat, interessiert mich auch. Magst Du es mir erklären, oder muss ich selber danach googlen?

      E4X ist eine in ECMA-357 standardisierte Erweiterung von ECMAScript. Siehe z.B. den entsprechenden Eintrag im MDC.

      Christoph

    2. Was es mit dem Attribut "e4x" in Deinem Script-Tag auf sich hat, interessiert mich auch. Magst Du es mir erklären, oder muss ich selber danach googlen?

      Man haut den Fragestellern um die Ohren, sich bitte erst einmal selbstständig zu einem Thema schlau zu machen ... No comment.

      Mathias

      1. Lieber Mathias,

        | Was es mit dem Attribut "e4x" in Deinem Script-Tag auf sich hat, interessiert mich auch. Magst Du es mir erklären, oder muss ich selber danach googlen?

        Man haut den Fragestellern um die Ohren, sich bitte erst einmal selbstständig zu einem Thema schlau zu machen ... No comment.

        bei dieser Erweiterung wird das new XML()-Objekt als Erweiterung zum JavaScript-Sprachkern hinzugefügt... jedenfalls scheint es so gemeint zu sein. Dass es jetzt in besagtem Beispiel nicht klappt, legt nahe, auf ebendiese Erweiterung zu verzichten. Dass eine Same-Origin-Policy eventuell noch erschwerend hinzukommen könnte (im Code-Beispiel des OP wird eine Resource auf dem identischen Server referenziert), wäre dann eine nächste mögliche Fehlerquelle.

        Was habe ich jetzt falsch gemacht? Dass ich "e4x" in Frage gestellt habe? Oder dass der OP nicht explizit erwähnt hat, dass er sich auf diese Erweiterung verlässt?

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. Warum verwendest du E4X? Damit kannst du meines Wissens keine externen XML-Dokumente laden.

    Du hast vielmehr folgende Möglichkeiten:

    • XMLHttpRequest

    oder

    • document.implementation.createDocument und die load-Methode des damit erzeugten Dokument-Objekts
    var xmlDoc = document.implementation.createDocument("", "", null);  
    xmlDoc.load("blumen.xml");  
    xmlDoc.onload = function() {  
       alert(xmlDoc.documentElement);  
    }
    

    Dann hast du allerdings DOM-Zugriff, nicht E4X-Zugriff.

    Theoretisch sollte einfach das gehen, um von DOM zu E4X zu kommen:

    var e4X = new XML(xmlDoc);

    Aber das kann Firefox nicht, weil er ECMAScript for XML nicht vollständig umsetzt.

    Wenn du E4X brauchst, dann würde ich dir raten, den XML-Code des Dokuments mit XMLHttpRequest zu laden und den responseText dann an den XML-Konstruktor zu übergeben. (Dummerweise wird das Dokument dann zweimal geparst, einmal als DOM und einmal als E4X.)

    leider funktioniert es nicht (: ... die firefox-fehlerkonsole gibt immer "xmlDoc.load is not a function" aus.

    Wo ist definiert, dass eine solche Methode existiert?

    Mathias