Nike: Objekt unbekannt ? Was ist hier falsch ?

Hi,

Ich lese gerade das Buch von William Pardi "XML in Action" und sehe bereits einige Druckfehler. Beim starten eines fertigen Codes bleibt er bei folgender Zeile stehen

var rootElem = xmlDoc.documentElement;
var toVar = rootElem.childNodes.item(0).text; -> exakt hier, da er das Objekt nicht erkennt. Alles ist richtig referenziert.

Ich habe den Quellcode 1:1 übernommen. Kann es am Parser von MS liegen ?

Wer das Buch zufällig zur Hand hat : Seite 81

  1. Hi,

    var toVar = rootElem.childNodes.item(0).text; -> exakt hier, da er das Objekt nicht erkennt. Alles ist richtig referenziert.

    ich nehme mal an, die item-Methode ist nicht bekannt. childNodes ist eine Liste, die Du genau wie ein Array ansprechen kannst: childNodes[index]

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hmmmm...
      Lasse ich documentElement weg und referenziere direkt über xmlDoc, so macht es schon was nur nicht das Richtige.

      Ich poste mal hier den Code

      Die XML Datei mail.xml

      <?xml version="1.0"?>

      <EMAIL>
        <TO>Jodie@msn.com</TO>
        <FROM>Bill@msn.com</FROM>
        <CC>Philip@msn.com</CC>
        <SUBJECT>Mein Dokument ist ein Baum</SUBJECT>
        <BODY>Dies ist ein Beispiel einer Baumstruktur</BODY>
      </EMAIL>

      Und die Html Datei

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
      <HTML>

      <HEAD>
       <TITLE>Listing 5.5</TITLE>

      <SCRIPT LANGUAGE="JavaScript" FOR="window" EVENT="onload">
        loadDoc();
       </SCRIPT>

      <SCRIPT LANGUAGE="JavaScript">
        var xmlDoc = new ActiveXObject("microsoft.xmldom");
        xmlDoc.load("mail.xml");

      function loadDoc()
        {
        if (xmlDoc.readyState == "4")
         start()
        else
         window.setTimeout("loadDoc()", 4000);
        }

      function start()
        {
        var rootElem = xmlDoc.documentElement;
        var toVar = rootElem.childNodes.item(0).text;
        alert(toVar);
        }
       </SCRIPT>
      </HEAD>

      <BODY>

      </BODY>

      </HTML>

      1. Halihallo Nike

        Lasse ich documentElement weg und referenziere direkt über xmlDoc, so macht es schon was nur nicht das Richtige.

        Was verstehst du hier unter "referenzieren"?

        Ich poste mal hier den Code

        ... welcher bei mir ohne Probleme und Fehler funktioniert.

        var toVar = rootElem.childNodes.item(0).text;

        Einziges, was ich mir vorstellen könnte: Wer sagt dir, dass item(0) wirklich eine
        Element-Node ist, welche Text enthält? - Es könnte IMHO auch der Zeilenumbruch und die
        Spaces bis zu <TO> sein (eine Text-Node). Wenn du das Dokument nicht validierst, dann
        solltest du zumindest einige Tests durchführen, sodass du Fehler schneller finden kannst,
        wenn sie mal auftreten sollten.

        Viele Grüsse

        Philipp

        --
        RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
        Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
        1. Hoi Phil,

          Referenzieren scheint das falsche Wort zu sein.

          xmlDoc.childNodes ( ohne documentElement ). Da bekomme ich irgendeinen Mist in der Msgbox. Muss aber das Falsche sein. Schon der Objektstruktur wegen.

          ...Es könnte IMHO auch der Zeilenumbruch und die
          Spaces bis zu <TO> sein (eine Text-Node). Wenn du das Dokument nicht validierst, dann ...

          Naja, laut Code sollte der Inhalt des TO Elements angegeben werden. Bei dir funktioniert das ja. Also muss irgendwo anders der Wurm drin stecken.

          Ich weiss nicht ob es Systemintern einen Fehler geben kann. Ich erstelle eine neue Dokumentreferenz per "new ActiveXObject". Kann es nicht sein das ich irgendeine alte Version von diesem Parser habe der die Objekte nicht kennt ?

          1. Halihallo Nike

            xmlDoc.childNodes ( ohne documentElement ). Da bekomme ich irgendeinen Mist in der Msgbox. Muss aber das Falsche sein. Schon der Objektstruktur wegen.

            Das ist komisch. Egal ob du vom Document Element aus gehst, oder vom Dokument selber;
            das Ergebnis sollte das selbe sein.

            Ich weiss nicht ob es Systemintern einen Fehler geben kann. Ich erstelle eine neue Dokumentreferenz per "new ActiveXObject". Kann es nicht sein das ich irgendeine alte Version von diesem Parser habe der die Objekte nicht kennt ?

            IMHO nein, aber ich sehe auch kein anderes Problem. Vielleicht hilft es ja, wenn du
            auf MSXML2 (ich glaube zwei ist aktuell, oder?) updatest? - Zum Test würde ich einfach
            mal empfehlen die Whitespaces (Newlines und Spaces z.B.) wegzulassen, funktioniert es
            dann?

            Viele Grüsse

            Philipp

            --
            RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
            Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.
            1. Das Problem ist gelöst. Anders als bei Sprachen wie C oder VB verweist Java(Script) nicht direkt auf ein FEHLENDES Element.

              Meine mail.xml wurde nicht als XML Datei identifiziert, sondern war eine normale Textdatei mail.xml.txt, was man aber so anfangs gar nicht erkennen konnte. Diesmal erstellte ich das Dokument direkt mit dem XML Notepad.

              Eigentlich müsste der Fehler "Dokument nicht gefunden" kommen und nicht ein verwirrendes "Objekt erforderlich/nicht gefunden" auftauchen.

              2 Tage umsonst gegrübelt. Das sind halt sogenannte "unlogische" Fehler bei dem man alles kalputt hauen könnte.

              Jedenfalls danke für deine Hilfe und ich glaube du wirst dich selbst gefragt haben wo der Fehler sein könnte, der eigentlich keiner war.

              Gruss Nick