Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   FreePascal Wert in XML finden? (https://www.delphipraxis.net/205857-wert-xml-finden.html)

Klaus01 27. Okt 2020 14:12

AW: Wert in XML finden?
 
.. kommentiere doch mal " Doc.Appendchild(RootNode); " aus.

Grüße
Klaus

LPascal 27. Okt 2020 14:23

AW: Wert in XML finden?
 
Zitat:

Zitat von Klaus01 (Beitrag 1476199)
.. kommentiere doch mal " Doc.Appendchild(RootNode); " aus.

Grüße
Klaus

Ne, bringt nichts... immer der selbe Fehler.

LPascal 27. Okt 2020 15:14

AW: Wert in XML finden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab's jetzt so gelöst:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var
  Doc: TXMLDocument;
  RootNode, ParentNode, DatenNode, VarElemen, ElementNode, ItemNode, TextNode: TDOMNode;
begin
  try
    ReadXMLFile(Doc, 'Muster.xml');

    //Doc := TXMLDocument.Create;
    //RootNode := Doc.CreateElement('Daten2');
    //Doc.Appendchild(RootNode);
    //RootNode:= Doc.DocumentElement;

    ElementNode := Doc.CreateElement('Personen');

    ItemNode:=Doc.CreateElement('Anrede');
    TextNode:=Doc.CreateTextNode('Herr');
    ItemNode.AppendChild(TextNode);
    ElementNode.AppendChild(ItemNode);

    ItemNode:=Doc.CreateElement('Vorname');
    TextNode:=Doc.CreateTextNode('Tim');
    ItemNode.AppendChild(TextNode);
    ElementNode.AppendChild(ItemNode);

    ItemNode:=Doc.CreateElement('Alter');
    TextNode:=Doc.CreateTextNode('19');
    ItemNode.AppendChild(TextNode);
    ElementNode.AppendChild(ItemNode);

    //RootNode.AppendChild(ElementNode);

    DatenNode := Doc.DocumentElement.FindNode('Header');
    DatenNode.AppendChild(ElementNode);

    WriteXMLFile(Doc, 'MusterNeu2.xml')
  finally
    Doc.Free;
  end;
end;
Der Nachteil ist nur, dass für den <Personen>-Knoten es keinen <Root>-Knoten gibt, man kann somit nicht mehrere Personen anlegen, des weiteren erscheint die neue Person im <Header>-Knoten statt <Daten>-Konoten.

LPascal 27. Okt 2020 19:04

AW: Wert in XML finden?
 
Es scheint an dieser Zeile zu scheitern - "Doc.Appendchild(RootNode);"
Das mach wohl den Knoten RootNode zum Root-Knoten im Doc, und das muss bereits vorhanden bzw. besetzt sein, und daher der Fehler.
Kann das sein?

Klaus01 27. Okt 2020 19:25

AW: Wert in XML finden?
 
Guten Abend,

das Teilmacht was Du ihm sagst
Delphi-Quellcode:
    DatenNode := Doc.DocumentElement.FindNode('Header');
    DatenNode.AppendChild(ElementNode);
Demnach wird der neue <Personen> Knoten an den Header angehängt.
Der gemeinsame Aufhänger für die Personen ist aber der <Daten> Knoten.

Grüße
Klaus

LPascal 27. Okt 2020 19:32

AW: Wert in XML finden?
 
Zitat:

Zitat von Klaus01 (Beitrag 1476219)
Guten Abend,

das Teilmacht was Du ihm sagst
Delphi-Quellcode:
    DatenNode := Doc.DocumentElement.FindNode('Header');
    DatenNode.AppendChild(ElementNode);
Demnach wird der neue <Personen> Knoten an den Header angehängt.
Der gemeinsame Aufhänger für die Personen ist aber der <Daten> Knoten.

Grüße
Klaus

Mit <Daten> stürzt das Programm mit einem Exception-Fehler ab. Ich verstehe jetzt nur Bahnhof. :vernupft:

Klaus01 27. Okt 2020 19:37

AW: Wert in XML finden?
 
Delphi-Quellcode:
DatenNode := Doc.DocumentElement.FindNode('Header').FindNode('Daten');
DatenNode.AppendChild(ElementNode);
macht das obige einen Unterschied?

Grüße
Klaus

LPascal 27. Okt 2020 19:46

AW: Wert in XML finden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Das geht? Klasse, jetzt funkt es! Riiiiiesen Dank Dir!
Jetzt aber noch eine Hürde. Ich muss ja zwei Personen einfügen. Wie kann ich das gleiche Element bzw. <Personen>-Konoten noch einmal anlegen, ohne das erste zu überschrieben?

Klaus01 27. Okt 2020 20:32

AW: Wert in XML finden?
 
Delphi-Quellcode:
ElementNode := Doc.CreateElement('Personen');
erstellt doch bei jedem Aufruf einem neuen Knoten oder?
Damit wird der alte nicht überschrieben.

Ich würde das ganze anfügen in eine Methode mit entsprechenden Parametern auslagern.

Grüße
Klaus

LPascal 29. Okt 2020 10:42

AW: Wert in XML finden?
 
Zitat:

Zitat von Klaus01 (Beitrag 1476224)
Delphi-Quellcode:
ElementNode := Doc.CreateElement('Personen');
erstellt doch bei jedem Aufruf einem neuen Knoten oder?
Damit wird der alte nicht überschrieben.

Ich würde das ganze anfügen in eine Methode mit entsprechenden Parametern auslagern.

Grüße
Klaus

Ja, ich weiß nicht wieso, aber bei wird wird das überschrieben. :gruebel:
Wahrscheinlich weil ich keinen Root-Knoten habe. Aber wenn ich diesen anlege, dann kann ich mein Konstrukt nicht in die bestehende XML einfügen, da es wohl zu Root-Konflikten kommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:30 Uhr.
Seite 3 von 4     123 4      

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