Entwickler-Ecke
Dateizugriff - IXMLDocument: Wie kann ich eine XML-Datei einlesen?
pmw - Di 24.08.04 13:51
Titel: IXMLDocument: Wie kann ich eine XML-Datei einlesen?
Hallo!
Wie kann ich mit "IXMLDocument" eine XML-Datei auslesen? Ich möchte das Attribut eines Tags erhalten. Aber leider erhalte ich immer nur "NULL" als Rückgabewert :(
XML-Datei:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <?xml version="1.0" encoding="ISO-8859-1"?> <Grid_Test> <DEFAULTCELL Fett="0" TextAnzeigen="1" Rechtsbuendig="0" Trennline="0" LinkerRand="1" ObererRand="1" RechterRand="1" UntererRand="1"></DEFAULTCELL> <ROW0> <CELL0 Fett="1" Colspan="4"></CELL0> <CELL4></CELL4> <CELL5></CELL5> </ROW0> </Grid_Test> |
Delphi-Code
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure LadeXML; var XML: IXMLDocument; begin
XML := newXMLDocument; XML.LoadFromFile(sXmlDatei); XML.DocumentElement.ReadOnly; XML.Active;
ShowMessage(XML.DocumentElement.XML); ShowMessage(XML.DocumentElement.ChildNodes['Grid_Test'].ChildNodes['DEFAULTCELL'].Attributes['Fett']);
end; |
Viele Grüße
pmw
opfer.der.genauigkeit - Di 24.08.04 14:30
Hi,
Ich habe mal an einem Projekt gearbeitet, indem XML- Dokumente
verwendet wurden.
Mein Partner hat damals Interfaces für die jeweiligen Nodes geschrieben.
Schau mal in der Hilfe nach IXMLNode (unit XMLIntf).
Oder auch:
Unit: XMLDoc
und versuch dich mal mit folgender Funktion.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function MyClass.LoadXML(aFileName: string): boolean; const TargetNamespace = ''; begin try FDoc := LoadXMLDocument(aFileName); XMLRoot := FDoc.GetDocBinding('NodeName', TNodeKlasse, TargetNamespace) as NodeInterface; FLoaded := true; except ... end; |
// NICHT GETESTET
Mehr wüßt ich jetzt auch nicht. :roll:
Lies dich mal in die Hilfe ein, das Thema ist recht umfangreich.
Weiß aber auch nicht ob es vielleicht einfachere Möglichkeiten gibt.
end;
Moderiert von
UGrohne: Code- durch Delphi-Tags ersetzt.
UGrohne - Di 24.08.04 14:34
Versuch erstmal Dein XML richtig zu schreiben ;-):
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| <?xml version="1.0" encoding="ISO-8859-1"?> <Grid_Test> <DEFAULTCELL Fett="0" TextAnzeigen="1" Rechtsbuendig="0" Trennline="0" LinkerRand="1" ObererRand="1" RechterRand="1" UntererRand="1"></DEFAULTCELL> <ROW0> <CELL0 Fett="1" Colspan="4"></CELL0> <CELL4></CELL4> <CELL5></CELL5> </ROW0> </Grid_Test> |
(siehe letzte Zeile)
Dein Code stimmt ansonsten.
pmw - Di 24.08.04 14:43
| Zitat: |
| Versuch erstmal Dein XML richtig zu schreiben |
Im Orginal stimmt die XML-Datei. Ich hatte die Beispiel-XML-Datei vereinfacht, da das Orginal deutlich länger ist. Dabei ist mir der Fehler passiert. Das Problem ist damit leider noch nicht behoben.
UGrohne - Di 24.08.04 17:41
Beim ersten richtig hingeguckt, beim zweiten Code-Ausschnitt natürlich nicht:
Delphi-Quelltext
1: 2:
| XML.DocumentElement.ReadOnly; XML.Active; |
Das funktioniert nicht, weil das Eigenschaften sind, Du musst ihnen true oder false zuweisen. Somit hat er das Dokument auch nicht geparst und dann ist es logisch, dass da NULL rauskommt.
Delphi-Quelltext
1: 2:
| XML.DocumentElement.ReadOnly:=true; XML.Active:=true; |
Freez - Di 07.09.04 22:57
hmm war doch schon fast richtig ...
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure LadeXML; var XML: IXMLDocument; begin
XML := newXMLDocument; XML.LoadFromFile(sXmlDatei); XML.DocumentElement.ReadOnly := true; // oder false XML.Active := true; // sollte sich nicht zu false ergeben ...
ShowMessage(XML.DocumentElement.XML);
ShowMessage(XML.DocumentElement.ChildNodes['DEFAULTCELL'].Attributes['Fett']); //ChildNodes['Grid_Test']. <--- war zu viel .... end; |
Ich hoffe das die erklärung stimmt ... :)
Aber wenn mich nicht alles täuscht dann hast du in deiner xml Datei ein root Element, das auch nur ein mal vorkommen darf.
Das ist bei dir <Grid_Test>
mit XML.DocumentElement öffnest du dieses Element. wenn du dann auf "ChildNodes['Grid_Test']" zugreifst dann machst du das quasi doppelt.
Ich hoffe das das so richtig ist...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!