Objekt unbekannt ? Was ist hier falsch ?
Nike
- xml
0 Cheatah0 Nike
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
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
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>
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
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 ?
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
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