Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Leere Rückgabewerte beim Auslesen einer XML mit JVSimpleXML (https://www.delphipraxis.net/140232-leere-rueckgabewerte-beim-auslesen-einer-xml-mit-jvsimplexml.html)

dust258 14. Sep 2009 08:31


Leere Rückgabewerte beim Auslesen einer XML mit JVSimpleXML
 
Ich habe vor mich langsam von meinen (mehr oder weniger) geliebten INIs zu trennen und und nutze daher zum 1. mal die XML Komponente JVSimpleXML in einem meiner Projekte. Ich habe allerdings folgendes Problem:

Ich kann zwar meine Werte in die XML schreiben, aber beim auslesen bekomme ich nur leere Values zurück...
hier die XML:
Delphi-Quellcode:

- <ComboBoxItems>
-  <FrameErrorHandling>
-   <cBoxFailDataType>
     <wert1 />
     <wert2 />
     <wert3 />
     <wert4 />
    </cBoxFailDataType>
    <cBoxFailDestOpt1 />
    <cBoxFailDestOpt2 />
    <cBoxFailDestOpt3 />
   </FrameErrorHandling>
  </ComboBoxItems>
und hier der Code mit dem ich versuche die Daten auszulesen:
Delphi-Quellcode:

  loadDataFromFile;
  lXML := TDMXMLAccess.Create(self);
  try
    if ((assigned(SimpleXML.Root)) and
        (assigned(SimpleXML.Root.Items.ItemNamed[inSUnitName])) and
        (assigned(SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName]))) then
    begin
      for i := 0 to SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName].items.Count - 1 do
      begin
        outSLValue.Add(SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName].Items.Item[i].Value);
        // outSLValue ist eine StringList und wird in diesem Fall mit 4 leeren Items gefüllt.
      end;
    end;
  finally
    lXML.free;
  end;
Ich steh echt auf dem Schlauch. "inSUnitName = FrameErrorHandling" und "inSCBoxName = cBoxFailDataType"

himitsu 14. Sep 2009 08:39

Re: Leere Rückgabewerte beim Auslesen einer XML mit JVSimple
 
ich sehe in der XML-Datei nirgendwo Values ... kann nur Nodes entdecken

z.B. "wert1" ist der Name dieses Nodes, welcher keinen Value besitzt
XML-Code:
<nodename />

<nodename>value</nodename>

<nodename attrname="attrvalue">nodevalue</nodename>

dust258 14. Sep 2009 09:00

Re: Leere Rückgabewerte beim Auslesen einer XML mit JVSimple
 
Super, danke so funktioniert es. Ich habe meinen Create-Befehl umgebaut. Es sieht jetzt wie folgt aus (falls mal jemand das gleiche Problem haben sollte :roll: )

Erstellen der XML
Delphi-Quellcode:
   
SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName].items.add('item');

SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName].items.Item[SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName].items.Count-1].Value := inSValue;
Und die XML
Delphi-Quellcode:
- <ComboBoxItems>
-  <FrameErrorHandling>
-   <cBoxFailDataType>
     <item>File</item>
     <item>wert1</item>
     <item>wert2</item>
     <item>wert3</item>
     <item>wert4</item>
    </cBoxFailDataType>
-   <cBoxFailDestOpt1>
     <item>DAT</item>
     <item>gg</item>
    </cBoxFailDestOpt1>
   </FrameErrorHandling>
  </ComboBoxItems>
DANKE himitsu

himitsu 14. Sep 2009 13:18

Re: Leere Rückgabewerte beim Auslesen einer XML mit JVSimple
 
Liefert bei JVSimple die Funktion .Add nicht auch den Node zurück?

Wenn ja, dann kannst du es mindestens so abkürzen :)
Delphi-Quellcode:
SimpleXML.Root.Items.ItemNamed[inSUnitName].items.itemnamed[inSCBoxName].items.add('item').Value := inSValue;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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