Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi JvSimpleXml Nodes löschen (https://www.delphipraxis.net/113580-jvsimplexml-nodes-loeschen.html)

cookie22 10. Mai 2008 13:22


JvSimpleXml Nodes löschen
 
Hallo,

hab folgendes Problem. Ich möchte das komplette erste "Node" Tag löschen.

Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
<Root>
  <Node>
    <Wert1>Test1</Wert1>
    <Wert2>Test2</Wert2>
  </Node>
  <Node>
    <Wert1>Test3</Wert1>
    <Wert2>Test4</Wert2>
  </Node>
</Root>
Nun bekomm ich aber immer n leeres Tag (<Node/>), wenn ich das so mache.

Delphi-Quellcode:
var
i: Integer;
Node: TJvSimpleXMLElem;
begin
for i := 0 to Xml.Root.Items.Count -1 do
  begin
    Node := Xml.Root.Items[i];
    if Node.Items.ItemNamed['Wert1'].Value = 'Test1' then
      Node.Items.Clear;
  end;
end;
Das kommt dabei raus:

Delphi-Quellcode:
<?xml version="1.0" encoding="iso-8859-1"?>
<Root>
  <Node/>
  <Node>
    <Wert1>Test3</Wert1>
    <Wert2>Test4</Wert2>
  </Node>
</Root>
Komm nicht drauf wie ich das leere Tag ganz loswerde, wahrscheinlich hab ich mal wieder Tomaten auf den Augen.
Hoffe ihr könnt mir helfen.

Gruss Cookie!

marabu 10. Mai 2008 15:20

Re: JvSimpleXml Nodes löschen
 
Hallo,

Leeren ist nicht Löschen:

Delphi-Quellcode:
var
  i: Integer;
begin
  with SimpleXML.Root.Items do
    for i := Pred(Count) downto 0 do
      if Item[i].Items.ItemNamed['Wert1'].Value = 'Test1' then
        Delete(i);
end;
Grüße vom marabu

cookie22 10. Mai 2008 17:06

Re: JvSimpleXml Nodes löschen
 
Oh, das hätte ich auch selbst sehen können. :wall:
Vielen Dank.

whiteF 30. Jun 2011 19:32

AW: JvSimpleXml Nodes löschen
 
hi

ich bekomme, dass hier nicht gelöscht...
es ist zwar schin alles gesagt... aber irgendwie will das bei mir nicht

XML:
Code:
<Kunden>
  <Kundennummer1>
    <Name>Kunde1</Name>
    <Strasse></Strasse>
    <PLZ></PLZ>
soll so werden:

Code:
<Kunden>
  <Kundennummer1>
    <Name>Kunde1</Name>
    <PLZ></PLZ>
Delphicode:
Delphi-Quellcode:
SimpleXML.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'Kunden.xml');
SimpleXML.Root.Name :='Kunden';
SimpleXML.Root.Items.ItemNamed['Kundennummer1'].Items.Delete('Strasse');
das haut leider nicht hin, kann mir da jmd helfen?

ConnorMcLeod 3. Jul 2011 05:34

AW: JvSimpleXml Nodes löschen
 
Ich habe es soeben durchgespielt und es funktioniert:
Delphi-Quellcode:
var
  lXML : TJvSimpleXML;
begin
  lXML := TJvSimpleXML.Create(nil);
  try
    lXML.Root.Name := 'Kunden';
    with lXML.Root.Items.Add('Kundennummer1', '') do
    begin
      Items.Add('Name', 'Kunde1');
      Items.Add('Strasse', '');
      Items.Add('PLZ', '');
    end;
    lXML.Root.Items.ItemNamed['Kundennummer1'].Items.Delete('Strasse');
    RichEdit1.Text := lXML.XMLData;
  finally
    FreeAndNil(lXML);
  end;
Der Unterschied im XML besteht darin, dass das leere Tag 'Strasse' bei Dir als <Strasse></Strasse> dargestellt wird, aber korrekterweise so aussieht: <Strasse />. Vllt ist das der Knackpunkt.

himitsu 3. Jul 2011 10:02

AW: JvSimpleXml Nodes löschen
 
Zitat:

Zitat von ConnorMcLeod (Beitrag 1109723)
Der Unterschied im XML besteht darin, dass das leere Tag 'Strasse' bei Dir als <Strasse></Strasse> dargestellt wird, aber korrekterweise so aussieht: <Strasse />. Vllt ist das der Knackpunkt.

Sollte eigentlich egal sein, jedenfalls laut XML-Spezifikation. Es sind einfach nur unterschiedliche Darstellung eines "leeren" Knotens.

Kann natürlich aber auch sein, daß die JEDI-Leute das irgndwie anders behandeln.
Wobei es auch einige XML-Libs gibt, wo man das Verhalten diesbezüglich steuern kann ... könnte man z.B. mal in die Optionen/Einstellungen der jeweiligen Lib reinsehn.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz