Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Was sind Kindknoten in XML?
Gerhard_S - Do 05.01.12 07:20
Titel: Was sind Kindknoten in XML?
Hallo,
ich muss XML-Dateien auslesen, die so aufgebaut sind:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| <?xml version="1.0" encoding="UTF-8"?> <session xmlns="http://winscp.net/schema/session/1.0" name="sessionname" start="2012-01-04T22:09:53.504Z"> <ls> <destination value="/httpdocs/content/test" /> <files> <file> <filename value="meinOrdner" /> <type value="D" /> <modification value="2011-08-31T22:59:45.000Z" /> <permissions value="rwxr-x---" /> </file> ... </files> <result success="true" /> </ls> </session> |
Meine Frage: wie hangle ich mich zum ersten file-Eintrag durch? Ich benutze das bei Delphi mitgelieferte TXMLDocument.
Mit der Kette
Delphi-Quelltext
1: 2:
| ARoot := Doc.DocumentElement; AFileName := ARoot.ChildNodes['session'].ChildNodes['ls'].ChildNodes['destination'].ChildNodes['files'].ChildNodes[1].attributes['value']; |
geht's jedenfalls nicht.
Moderiert von
Narses: XML-Tags hinzugefügt
Moderiert von
Narses: Delphi-Tags hinzugefügt
Andreas L. - Do 05.01.12 08:14
Fehlt da in deinem Code nicht ein Kindknoten? Vielleicht klappt das:
Delphi-Quelltext
1:
| AFileName := ARoot.ChildNodes['session'].ChildNodes['ls'].ChildNodes['destination'].ChildNodes['files'].ChildNodes[1].ChildNotes['filename'].attributes['value']; |
Gerhard_S - Do 05.01.12 11:07
Andreas L. hat folgendes geschrieben : |
Fehlt da in deinem Code nicht ein Kindknoten? Vielleicht klappt das:
Delphi-Quelltext 1:
| AFileName := ARoot.ChildNodes['session'].ChildNodes['ls'].ChildNodes['destination'].ChildNodes['files'].ChildNodes[1].ChildNotes['filename'].attributes['value']; | |
Leider nicht: "Listenindex überschreitet das Maximum (1)" meldet Delphi. Ich vermute, dass es am Aufbau der XML-Datei liegt. Eine Abfrage auf ChildNodes.Count hat ergeben, dass nur ARoot einen Kindknoten hat, 'session', 'ls', 'destination' und 'files' melden 0 ChildNodes, obwohl 'files' mindestens einen Kindknoten hat.
Lemmy - Do 05.01.12 11:43
Gerhard_S hat folgendes geschrieben : |
Quelltext 1: 2:
| ARoot := Doc.DocumentElement; AFileName := ARoot.ChildNodes['session'].ChildNodes['ls'].ChildNodes['destination'].ChildNodes['files'].ChildNodes[1].attributes['value']; |
geht's jedenfalls nicht. |
Weil Files kein Kind von Destination ist - Destination dient lediglich dafür Attribute zu speichern - das wird sofort wieder geschlossen. Besorg dir nen anständigen XML-Viewer, wenns nichts kosten soll, dann das XML-Notepad von Microsoft.
Quelltext
1: 2:
| ARoot := Doc.DocumentElement; AFileName := ARoot.ChildNodes['session'].ChildNodes['ls'].ChildNodes['files'].ChildNodes['file'].ChildNodes['filename'].attributes['value']; |
Und wegen dem Attribut - da musst Du dir auch den Node holen in dem das Attribut steckt und nicht den Elternknoten... So sollte das eigentlich passen...
Gerhard_S - Do 05.01.12 12:02
Lemmy hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| ARoot := Doc.DocumentElement; AFileName := ARoot.ChildNodes['session'].ChildNodes['ls'].ChildNodes['files'].ChildNodes['file'].ChildNodes['filename'].attributes['value']; |
Und wegen dem Attribut - da musst Du dir auch den Node holen in dem das Attribut steckt und nicht den Elternknoten... So sollte das eigentlich passen... |
Hm, Delphi antwortet, wie es sich für ein Orakel gehört:
"Variante des Typs (Null) konnte nicht in Typ (OleStr) konvertiert werden."
Moderiert von
Narses: Zitat repariert.
Lemmy - Do 05.01.12 12:11
argh... lesen sollte man können:
Quelltext
1:
| AFileName := ARoot.ChildNodes['ls'].ChildNodes['files'].ChildNodes['file'].ChildNodes['filename'].attributes['value']; |
Session ist ja der DocumentRoot. Deshalb darf der da nicht mehr auftauchen.
baka0815 - Do 05.01.12 12:13
Hier mal das ganze als XML und eingerückt:
XML-Daten
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| <?xml version="1.0" encoding="UTF-8"?> <session xmlns="http://winscp.net/schema/session/1.0" name="sessionname" start="2012-01-04T22:09:53.504Z"> <ls> <destination value="/httpdocs/content/test" /> <files> <file> <filename value="meinOrdner" /> <type value="D" /> <modification value="2011-08-31T22:59:45.000Z" /> <permissions value="rwxr-x---" /> </file> ... </files> <result success="true" /> </ls> </session> |
Gerhard_S - Do 05.01.12 12:30
Lemmy hat folgendes geschrieben : |
argh... lesen sollte man können:
Quelltext 1:
| AFileName := ARoot.ChildNodes['ls'].ChildNodes['files'].ChildNodes['file'].ChildNodes['filename'].attributes['value']; |
Session ist ja der DocumentRoot. Deshalb darf der da nicht mehr auftauchen. |
Danke. So geht's.
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!