tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
982
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von ahykes
    ahykes ahykes ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Borken[NRW]
    Beiträge
    446
    Hallo Leutz,

    ich versuche gerade per Javascript meine XML-Datei auszulesen und in einer Tabelle anzeigen. Das funktioniert wie folgt auch ganz gut:

    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 	= '&nbsp;';
    			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 	= '&nbsp;';
    			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 	= '&nbsp;';
    			newTableRow.appendChild(newTableCell);			
    						
    			newTableBody.appendChild(newTableRow);
    			basicTable.appendChild(newTableBody);
    						
    		}
    		window.defaultStatus = elementCount + ' Recordsets in XML-File  found';
    	}
    }
    Meine XML-Datei sieht wie folgt aus (is natürlich nur ein Auszug) :
    <?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)
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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, ob
    Code :
    1
    
    xmlDoc.getElementById('XY')
    etwas zuTage fördert.
     

  3. #3
    Avatar von ahykes
    ahykes ahykes ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Borken[NRW]
    Beiträge
    446
    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

    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>
    Was hat es zum Beispiel mit (#PCDATA) auf sich? Aber ist bestimmt das falsche Forum dafür gell?
     

  4. #4
    Avatar von ahykes
    ahykes ahykes ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Borken[NRW]
    Beiträge
    446
    Achja: getElementById('xy') geht leider nicht. Er sagt immer, dass getElementById('xy') in diesem Fall keine Funktion sei !(?)
     

  5. #5
    Avatar von ahykes
    ahykes ahykes ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Borken[NRW]
    Beiträge
    446
    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)
     

  6. #6
    Avatar von ahykes
    ahykes ahykes ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Borken[NRW]
    Beiträge
    446
    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.
     

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  8. #8
    Avatar von ahykes
    ahykes ahykes ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Borken[NRW]
    Beiträge
    446
    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.
     

  9. #9
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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

  1. LPT-Port gezielt in C# ansprechen
    Von Xenion im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 24.10.09, 22:14
  2. Web gezielt durchsuchen per PHP
    Von Chaosengel_Gabriel im Forum PHP
    Antworten: 4
    Letzter Beitrag: 24.01.08, 21:06
  3. Antworten: 4
    Letzter Beitrag: 03.01.08, 19:18
  4. TextBox in Schleife gezielt ansprechen
    Von UwB im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 19.02.05, 23:27
  5. pop up, aber gezielt !
    Von vsitor im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 04.11.01, 22:35