Einzelnen Beitrag anzeigen

com3t

Registriert seit: 22. Sep 2005
Ort: Kitzbühel
1 Beiträge
 
#1

[erledigt] Knoten inmitten einer Datei duplizieren

  Alt 22. Sep 2005, 14:14
Hallo erstmal!

Habe folgendes Problem:

Delphi-Quellcode:

  appPath := ExtractFilePath( Application.ExeName );
  xmlDoc.LoadFromFile( appPath + 'template.xml' );
  xmlDoc.Active := true;
  header := xmlDoc.DocumentElement.ChildNodes['OrderHeader'];
  parts := xmlDoc.DocumentElement.ChildNodes['OrderDetail'].ChildNodes['ListOfItemDetail'];

  // Hier sollten beliebig viele Parts entstehen

  memoxmldata.Text := xmlDoc.XML.GetText;
Das ist mein Code, welcher folgende xml-Datei bearbeitet:

Delphi-Quellcode:

<Order>
  <OrderHeader>
     <bla>123</bla>
     <bla2>456</bla2>
  </OrderHeader>
  <OrderDetail>
    <ListOfItemDetail>
      <ItemDetail>
        <Part>1</Part>
        <Desc>Erstes Teil</Desc>
      </ItemDetail>
    <ListOfItemDetail>
  </OrderDetail>
</Order>
Nun, sollte es aber unterschiedlich viele ItemDetail Knoten geben, wie kann ich das bewerkstelligen ??

Sollte dann so aussehen( mit 2 solchen Knoten ), die entgültige Datei:

Delphi-Quellcode:
<Order>
  <OrderHeader>
     <bla>123</bla>
     <bla2>456</bla2>
  </OrderHeader>
  <OrderDetail>
    <ListOfItemDetail>
      <ItemDetail>
        <Part>1</Part>
        <Desc>Erstes Teil</Desc>
      </ItemDetail>
      <ItemDetail>
        <Part>2</Part>
        <Desc>Zweites Teil</Desc>
      </ItemDetail>
    <ListOfItemDetail>
  </OrderDetail>
</Order>
Vielen Dank für jegliche Hilfe

[edit]

Konnte es folgendermassen lösen:

Delphi-Quellcode:
appPath := ExtractFilePath( Application.ExeName );
  xmlDoc.LoadFromFile( appPath + 'template.xml' );
  xmlDoc.Active := true;
  header := xmlDoc.DocumentElement.ChildNodes['OrderHeader'];
  parts := xmlDoc.DocumentElement.ChildNodes['OrderDetail'].ChildNodes['ListOfItemDetail'].ChildNodes['ItemDetail'];

  { Hier entstehen beliebig viele Parts bzw. zur Zeit nur 2
    Sollte dann in eine Schleife rein, das Ganze, wobei das erste Element zuvor gefüllt werden sollte }


  tmpNode := parts.CloneNode( true );
  tmpNode.ChildNodes['Part'].Text := '2';
  xmlDoc.DocumentElement.ChildNodes['OrderDetail'].ChildNodes['ListOfItemDetail'].ChildNodes.Add( tmpNode );

  memoxmldata.Text := xmlDoc.XML.GetText;
[/edit]
  Mit Zitat antworten Zitat