Per JavaScript XML-Datei analysieren

Hallo,

ich möchte per JavaScript eine XML-Datei analysieren, das heißt, die einzelnen Knoten sowie deren (eventuell vorhandene) Inhalte auslesen.

Das Problem ist, dass ich mit den Methoden des node-Objektes im DOM irgendwie nicht zu Recht komme, entweder macht das nicht das, was ich mir drunter vorstelle, oder ich bin zu blöd, um es zu verstehen.

Angenommen, meine XML-Datei sieht so aus:

somedata1somedata2

Wie kann ich es dann in JavaScript hinbekommen, dass mir eine Funktion nacheinander die Werte „node1“, „node2“, „node3“, „somedata1“, … liefert???

Vielen Dank,

Golo Haas

xml.load (‚books.xml‘); Dort eigenes XML einlesen

\<!--

td
{
 background-color:#33CC66;
 padding:10px;
 font-family:Arial;
 font-weight:bold;
 font-sytle:normal;
 text-decoration:none;
 text-align:left;
 vertical-align:middle;
 color:white;
}

.cssAttList
{
 color:black;
}

--\>


var strBodyId = "idResults";
var defCELLWIDTH = "20";
var defCELLHEIGHT = "20";

var xml = new ActiveXObject("microsoft.xmldom");

var startTime = new Date();

xml.load ("books.xml");

var docRoot = xml.documentElement;

outputDoc(docRoot, 0);

var endTime = new Date();

window.status = Date.parse(endTime) + "|" + Date.parse(startTime);

function outputDoc(prmNode,prmIdents)
{
 var curElem = null;

 if (prmNode.nodeType == 1) {
 writeStartTag(prmNode,prmIdents);
 }

 for (var i=0; i\<prmNode.childNodes.length; i++) {
 curElem = prmNode.childNodes.item(i);
 outputDoc(curElem,prmIdents+1);
 }

 if (prmNode.nodeType == 3) {
 writeString(prmNode.text,prmIdents);
 }

 if (prmNode.nodeType == 1) {
 writeEndTag(prmNode,prmIdents);
 }
}

function writeStartTag(prmNode,prmIdents)
{
 var strHTML = "";

 for (var i=0; i\<prmNode.attributes.length; i++) {
 var theAtt = prmNode.attributes.item(i);

 strHTML += "&nbsp;" + theAtt.nodeName + "="" + theAtt.nodeValue + """;
 }

 strHTML = prmNode.tagName+"&nbsp;"+"\<span class='cssAttList'\>"+strHTML+"\</span\>";

 writeString(strHTML,prmIdents);
}

function writeEndTag(prmNode,prmIdents)
{
 writeString("/" + prmNode.tagName ,prmIdents);
}

function writeString(prmString,prmIdents)
{
 prmString = prmString ? prmString : "&nbsp;";
 prmIdents = prmIdents ? prmIdents : 0;

// prmString = prmString.replace(/\</g,"\<");
// prmString = prmString.replace(/\>/g,"\>");

 prmString = "\<"+prmString+"\>";

 var strTable = "\<table border='0' cellpadding='3' cellspacing='3' summary='Table'\>\<tr align='center'\>";

 for (var i=0; i\<prmIdents; i++) {
 strTable += "\<td nowrap='nowrap' valign='middle' width='"+defCELLWIDTH+"' height='"+defCELLHEIGHT+"'\>&nbsp;\<\/td\>";
 }
 strTable += "\<td nowrap='nowrap' valign='middle'\>";
 strTable += prmString;
 strTable += "\<\/td\>";
 strTable += "\<\/tr\>\<\/table\>";

 var oTableStr = self.document.createElement(strTable);

 self.document.all[strBodyId].insertAdjacentHTML("BeforeEnd",strTable); 
}

Hi!

var xml = new ActiveXObject(„microsoft.xmldom“);
xml.load („books.xml“);

Klasse Anfang für eine JavaScript! :wink:

Ich hätte zwar auch so direkt keine Möglichkeit gekannt, das ganze in reinem JavaScript zu lösen (gibt es wohl auch nicht), aber anscheinend gibt es zumindest was, was sowohl mit Netscape/Mozilla als auch mit dem IE funktioniert:

http://www.xs4all.nl/~ppk/js/importxml.html

Viel Spaß damit!

Stefan :smile:

Hi,

erst einmal vielen lieben Dank für die Mühe, die Du Dir gemacht hast. Leider benutzt diese Methode ActiveX und kommt somit nicht in Frage, da das ganze auch im Netscape 6.x sowie Mozilla laufen soll.

Aber trotzdem werde ich es mir mal aufheben, vielleicht kann ich es ja doch mal gebrauchen.

Vielen Dank trotzdem!

Golo

Hallo,

habe mir die Seite mal angesehen und das ist zwar auch noch nicht das Gelbe vom Ei, aber wohl das Beste, was man derzeit bekommt. Vielen Dank!

Grüße,

Golo Haas

Hallo nochmal!

Das Problem ist, dass ich mit den Methoden des node-Objektes
im DOM irgendwie nicht zu Recht komme, entweder macht das
nicht das, was ich mir drunter vorstelle, oder ich bin zu
blöd, um es zu verstehen.

Da bezüglich dem DOM zwischen XML und HTML eigentlich kein wirklicher Unterschied besteht, könnte dich folgender (lange) Artikel vielleicht interessieren:

http://mozilla.org/docs/dom/technote/tn-dom-table/

Ansonsten schau doch mal in eine der Referenzen ganz unten im Artikel, insbesondere das, was du hier findest:

http://dmoz.org/Computers/Programming/Languages/Java…

Gruß,
Stefan :smile: