Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi TjvSimpleXML: Existiert Item? (https://www.delphipraxis.net/126629-tjvsimplexml-existiert-item.html)

Florian H 29. Dez 2008 21:55


TjvSimpleXML: Existiert Item?
 
Aloha,

ich fürchte ja, die Frage ist entweder hochgradig trivial oder wurde schonmal gestellt, aber ich finde leider nichts.

Ich lese mit der TjvSimpleXML-Komponente eine XML-Datei ein, die eventuell optionale Items enthalten kann, sprich die kommen nicht unbedingt vor.
Wenn ich so ein Item jetzt aber über seinen Namen auslesen will, wenn es nicht exisitert, kommt es zu einer Exception:
Delphi-Quellcode:
str := jvSimpleXML.Root.Items.ItemNamed['Bla'].Items.ItemNamed['Blubb'].Value;
und die XML-Datei:
Code:
<rootElement>
  <Bla>
    <muh>...</muh>
    <Blubb>existiert manchmal, manchmal auch nicht.</Blubb>
  </Bla>
</rootElement>
Gibt es denn eine einfache Funktion ala "hasChildNamend(string):boolean" oder ähnliches, mit der ich herausfinden kann, ob so ein Child existiert?
Oder muss ich mir das selber basteln, indem ich alle Childs durchgehe und den Namen überprüfe?


Schöne Grüße
flo

C.Schoch 29. Dez 2008 22:42

Re: TjvSimpleXML: Existiert Item?
 
Hi,

ich habs so gelöst:

Delphi-Quellcode:
if jvSimpleXML.Root.Items.IndexOf('Bla') <> -1 then

Michael Habbe 29. Dez 2008 23:41

Re: TjvSimpleXML: Existiert Item?
 
Hi,

ich habe das Beispiel von den Jedis umgesetzt:
Delphi-Quellcode:
procedure ParsePosition(AnXMLNode: TJvSimpleXmlElem);
var
  i: Integer;
  n, s: String;
  tf: TField;
begin
  for i := 0 to AnXMLNode.Items.Count - 1 do
  begin
    n := AnXMLNode.Items[i].Name;
    s := AnXMLNode.Items[i].Value;

    if n = 'order_total' then
      Parse_order_total(AnXMLNode.Items[i])
    else
      if n = 'Bla' then
        tu_was_mit_bla;

    // hier müsste er auf alle Fälle trotzdem immer hinkommen
    if n <> '' then
    begin
      tf := XTCBestellungTbl.FindField(n);
      if tf <> nil then
        XTCBestellungTbl.FieldByName(n).AsString := s;
    end;
  end;
end;
Wenn das nicht geht, hilft das klassische try except.

Florian H 29. Dez 2008 23:42

Re: TjvSimpleXML: Existiert Item?
 
Dankeschön ... das mit IndexOf scheint ja recht schnell und zuverlässig zu sein.

Klaus01 30. Dez 2008 07:35

Re: TjvSimpleXML: Existiert Item?
 
Guten Morgen

sollte nicht auch
Delphi-Quellcode:
if assigned(jvSimpleXML.Root.Items.ItemNamed['Bla'].Items.ItemNamed['Blubb']) then
 ...
funktionieren?

Grüße
Klaus


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