ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
982
982
EMPFEHLEN
-
Hallo Leutz,
ich versuche gerade per Javascript meine XML-Datei auszulesen und in einer Tabelle anzeigen. Das funktioniert wie folgt auch ganz gut:
Meine XML-Datei sieht wie folgt aus (is natürlich nur ein Auszug)HTML-Code:function readXmlFileData(){ if (window.XMLHttpRequest) xmlDataObject = new window.XMLHttpRequest(); else xmlDataObject = new ActiveXObject("Microsoft.XMLHTTP"); if(xmlDataObject){ xmlDataObject.open("GET",'DATA/oisData.xml',false); xmlDataObject.send(""); xmlDoc = xmlDataObject.responseXML; }else alert('Could not initialize XMLHTTP-Object.\nNo Dataoperation can be done.'); if(!xmlDoc) { alert("No Data found!"); }else{ var elementCount = xmlDoc.getElementsByTagName("SYSTEM").length; for(i=0; i<elementCount; i++){ var xmlObject = xmlDoc.getElementsByTagName("SYSTEM")[i]; var basicTable = document.getElementById('data'); var newTableBody = document.createElement('tbody'); var newTableRow = document.createElement('tr'); //Gerätname---------------------------------------------------------------------------------- var newTableCell = document.createElement('td'); var xmlNode = xmlObject.childNodes[0]; if(xmlNode.hasChildNodes()) newTableCell.innerHTML = xmlNode.firstChild.nodeValue; else newTableCell.innerHTML = ' '; newTableRow.appendChild(newTableCell); //IP-Adresse--------------------------------------------------------------------------------- var newTableCell = document.createElement('td'); var xmlNode = xmlObject.childNodes[1]; if(xmlNode.hasChildNodes()) newTableCell.innerHTML = xmlNode.firstChild.nodeValue; else newTableCell.innerHTML = ' '; newTableRow.appendChild(newTableCell); //MAC-Adresse-------------------------------------------------------------------------------- var newTableCell = document.createElement('td'); var xmlNode = xmlObject.childNodes[2]; if(xmlNode.hasChildNodes()) newTableCell.innerHTML = xmlNode.firstChild.nodeValue; else newTableCell.innerHTML = ' '; newTableRow.appendChild(newTableCell); newTableBody.appendChild(newTableRow); basicTable.appendChild(newTableBody); } window.defaultStatus = elementCount + ' Recordsets in XML-File found'; } }
:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<IPV>
<SYSTEM id="DE065-VIP-560">
<GERAET_NAME>DE065-VIP-560</GERAET_NAME>
<IP_ADRESSE>53.43.160.1</IP_ADRESSE>
<MAC_ADRESSE>003011021930<MAC_ADRESSE />
</SYSTEM>
</IPV>
Nun endlich zu meinem Problem / zu meiner Frage: Wie kann ich nun auf einen bestimmten Knoten mit der id XY zugreifen ohne vorher die ganze Datei durchorgeln zu müssen? Meiner Meinung nach muss das doch auch ohne den ganzen Overhead gehen, oder?
Geändert von ahykes (15.10.09 um 19:15 Uhr)
-
Moin,
rein von XML-Seite her betrachtet, müsstest du eine DTD für das XML haben, wo das IDAttribute als solches deklariert ist, und das Dokument eingangs validieren...dann könntest du mit getElementById() arbeiten.
Ob sich das in einem HTML-Dokument, wo du dies XML-Document lädts, anders verhält, hab ich noch nicht probiert... teste doch einfach mal, obetwas zuTage fördert.Code :1
xmlDoc.getElementById('XY')
-
Hey Guten Morgen,
ahh okay. Das bedeutet also, dass man in der DTD-Datei deklariert welche Element-Typen es gibt, gell?
Okay, dann muss ich mich da mal versuchen. Ehm...Könntest Du mir da Helfen? Wie die auszusehen hätte? Habe bei Wikipedia nachgeschlagen:
Kurzes XML-Dokument mit Verweis auf eine externe DTD
Was hat es zum Beispiel mit (#PCDATA) auf sich? Aber ist bestimmt das falsche Forum dafür gell?Code :1 2 3 4 5 6 7 8 9 10 11 12 13
<?xml version="1.0" standalone="no"?> <!DOCTYPE hallo SYSTEM "hallo.dtd"> <hallo>Hallo Welt!</hallo> Der Inhalt von "hallo.dtd" <!ELEMENT hallo (#PCDATA)> Kurzes XML-Dokument mit interner DTD <?xml version="1.0" standalone="yes"?> <!DOCTYPE hallo [<!ELEMENT hallo (#PCDATA)>]> <hallo>Hallo Welt!</hallo>
-
Achja: getElementById('xy') geht leider nicht. Er sagt immer, dass getElementById('xy') in diesem Fall keine Funktion sei !(?)
-
Soweit bin ich schonmal
!DOCTYPE IPV[
<!ELEMENT SYSTEM (#PCDATA)>
<!ATTLIST SYSTEM id ID #REQUIRED>
<!ELEMENT GERAET_NAME (ANY)>
<!ELEMENT IP_ADRESSE (ANY)>
<!ELEMENT MAC_ADRESSE (ANY)>
]>
Habe auch eine gute Seite zum Nachlesen gefunden: http://www.w3schools.com/dtd/dtd_attributes.asp
Hat alles gut geklappt! Vielen Dank!Geändert von ahykes (16.10.09 um 10:08 Uhr)
-
Leider ist das Thema wieder etwas aktueller ...
Im Firefox funktioniert das hier wunderbar:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
if (window.XMLHttpRequest) xmlDataObject = new window.XMLHttpRequest(); else xmlDataObject = new ActiveXObject("Microsoft.XMLHTTP"); if(xmlDataObject){ xmlDataObject.open("GET",'data/stueckzahlen_xml.xml?'+new Date().getTime(),false); xmlDataObject.send(""); xmlDoc = xmlDataObject.responseXML; }else alert('Could not initialize XMLHTTP-Object.\nNo Dataoperation can be done.'); if(!xmlDoc) { alert("No Data found!"); }else{ try { var pdvProtokoll = xmlDoc.getElementById(protokollName); var stckz = pdvProtokoll.getElementsByTagName('G_STUECKZAEHLER'); if(pdvProtokoll && stckz) throw "pdvData"; else throw "noPdvData"; ...
Beim Internexplorer funktioniert der Ausdruck "var pdvProtokoll = xmlDoc.getElementById(protokollName);" leider nicht.
-
Mmmh,
hab mal recherchiert, bei MS nennt sich die entsprechende Methode nodeFromID (warum auch immer).
Habs damit in nem Schnelltest zwar nicht zum Erfolg gebracht, aber wenigstens gibts keine Fehlermeldung wegen unbekannter Methode
Vielleicht hast du ja mehr Erfolg.
-
Jetzt kommts:
Vielen Dank erstmal für Deine Hilfe. Er wirft meine absolute Lieblingsfehlermeldung:
"NULL ist Null oder kein Objekt."
Irgendwie scheint diese Funktion nicht das zu tun was sie soll.
-
Es ist schon ein Kreuz

Folgendes klappt bei mir im IE...per XPath
Code :1 2 3 4 5
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0"); xmlDoc.async = false; xmlDoc.setProperty("SelectionLanguage", "XPath"); xmlDoc.load('pfad.xml?'+new Date().getTime()); alert(xmlDoc.selectSingleNode("/IPV/SYSTEM[@id='DE065-VIP-560']").xml);
Allerdings nur ohne DTD
Ähnliche Themen
-
LPT-Port gezielt in C# ansprechen
Von Xenion im Forum .NET ArchivAntworten: 1Letzter Beitrag: 24.10.09, 22:14 -
Web gezielt durchsuchen per PHP
Von Chaosengel_Gabriel im Forum PHPAntworten: 4Letzter Beitrag: 24.01.08, 21:06 -
Einzelne <li> Listenpunkte gezielt mit CSS ansprechen
Von legio_x im Forum CSSAntworten: 4Letzter Beitrag: 03.01.08, 19:18 -
TextBox in Schleife gezielt ansprechen
Von UwB im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 19.02.05, 23:27 -
pop up, aber gezielt !
Von vsitor im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 04.11.01, 22:35





Zitieren
Login





