![]() |
Mehrere gleichnamige Elemente
Hi
ich hab nen XML-File welches ich auslesen möchte. Ich verwende dazu die ![]() Ich hab nun eine XML-Datei die mehrere gleichnamige Elemente hat. Leider hab ich kein Plan wie ich die (gezielt) auslesen kann. Hier erstmal ein Ausschnitt der XML: (Striche am Anfang zur orientation)
Delphi-Quellcode:
Auf das erste Element kann ich so zugreifen:
- <form name="BILLTO">
- <element name="BILLTO_STREET_1" type="text" caption="Straße/Hausnr.:"> <![CDATA[ Brunfels-Str. 8 ]]> </element> - <element name="BILLTO_POSTCODE" type="text" caption="PLZ:"> <![CDATA[ 79495 ]]> </element> - <element name="BILLTO_CITY" type="text" caption="Ort:"> <![CDATA[ Neuburg ]]> </element>
Delphi-Quellcode:
Mein Ziel: die Elemente anhand des Attribut name unterscheiden und drauf zugreifen.
Lib.root.getNode('formvalues/form/element').Value.AsString
Beispiel:
Delphi-Quellcode:
Geht sowas in der art?
Lib.root.getNode('formvalues/form').NodeByAttribut('name', 'BILLTO_POSTCODE').Value.AsString
Hoffe ihr versteht was ich meine^^ mfg.Dominik |
Re: Mehrere gleichnamige Elemente
Zitat:
Zitat:
![]() ![]() ![]() Ein Beispiel einfach durch die gesamte Liste zu iterieren:
Delphi-Quellcode:
(Ab BDS2006 besteht natürlich auch die Möglichkeit das ganze mit
var
lFormNode, lElement: TXMLNode; i: Integer; begin lFormNode := Lib.GetNodeFromPath('formvalues/form'); // Knoten gefunden? if assigned(lFormNode) and lFormNode.HasChildren then begin for i := 0 to pred(lFormNode.Nodes.Count) do begin lElement := lFormNode.Nodes[i]; ShowMessage(lElement.Value.AsString); end; end; end;
Delphi-Quellcode:
möglich)
for lElement in lFormNode.Nodes do
So, da du nun hier gleiche Knotennamen hast und du sie nur anhand der Attributewerte unterscheiden kannst, kann ich mir auch vorstellen, dass du einen bestimmten Knoten ermitteln willst, in dem du sagst, was das Attribut "name" für ein Wert haben sollte. Dann kannst du es auch so machen:
Delphi-Quellcode:
Die Dokumentation für die Library ist unter anderem
var
lFormNode, lElement: TXMLNode; i: Integer; begin lFormNode := Lib.GetNodeFromPath('formvalues/form'); // Knoten gefunden? if assigned(lFormNode) and lFormNode.HasChildren then begin lElement := lFormNode.Nodes.GetNodeByAttributeValue('element', 'name', 'BILLTO_STREET_1'); if assigned(lElement) then ShowMessage('Street 1: ' + lElement.Value.AsString) else ShowMessage('Street 1: <none>'); end; end; ![]() Wenn weitere Fragen sind, poste sie hier... /PS: Ja ich weiß, dass die Benennung Nodes.Nodes[] doof bis dumm ist, aber es ist leider so historisch gewachsen. Durch die Default Eigenschaft fällt es in Delphi nicht so auf, aber z.B. im C++Builder fällt es massiv auf, da dort die Default Eigeschaften nicht verfügbar/nutzbar sind. Ich durfte mir von manchen Nutzern schon entsprechende Kommentare anhören, aber leider ist es nun nicht mehr groß änderbar. |
Re: Mehrere gleichnamige Elemente
genial... du hast mir den Abend gerettet :mrgreen:
und das nächste mal wenn ich ne Frage zu deiner Lib habe wende ich mich gleich an dich :cheers: Big THX und mfg.Dominik :dp: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz