Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: [erledigt] Knoten inmitten einer Datei duplizieren

  Alt 23. Sep 2005, 08:48
Hallo com3t,

herzlich willkommen in der Delphi-PRAXiS.

In deinem XML musst du das Element ListOfItemDetail schließen - wahrscheinlich ein Schreibfehler.
Mit cloneNode kannst du ja nur arbeiten, wenn schon ein item zum clonen existiert. Mach es besser so:

Delphi-Quellcode:
unit DemoFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc;

type
  TDemoForm = class(TForm)
    XMLDoc: TXMLDocument;
    Memo: TMemo;
    AddButton: TButton;
    InitButton: TButton;
    procedure InitButtonClick(Sender: TObject);
    procedure AddButtonClick(Sender: TObject);
  private
    FNextPartNumber: cardinal;
    ItemList: IXMLNode;
    function GetNextPartNumber: cardinal;
  public
    procedure AddItem(sDesc: string);
    procedure InitDoc;
    property NextPartNumber: cardinal read GetNextPartNumber write FNextPartNumber;
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

procedure TDemoForm.AddItem(sDesc: string);
begin
  with ItemList.AddChild('ItemDetail') do begin
    AddChild('Part').Text := IntToStr(NextPartNumber);
    AddChild('Desc').Text := sDesc;
  end;
end;

function TDemoForm.GetNextPartNumber: cardinal;
begin
  Inc(FNextPartNumber);
  Result := FNextPartNumber;
end;

procedure TDemoForm.InitDoc;
var
  nDetail: IXMLNode;
begin
  xmlDoc.DocumentElement := xmlDoc.CreateElement('Orders', '');
  with xmlDoc.DocumentElement do begin
    AddChild('OrderHeader');
    nDetail := AddChild('OrderDetail');
  end;
  ItemList := nDetail.AddChild('ListOfItemDetail');
end;

procedure TDemoForm.InitButtonClick(Sender: TObject);
begin
  InitDoc;
  Memo.Lines.Assign(xmlDoc.XML);
end;

procedure TDemoForm.AddButtonClick(Sender: TObject);
var
  sDesc: string;
begin
  sDesc := 'Description';
  if InputQuery('New item', 'Description', sDesc) and (sDesc <> '') then begin
    AddItem(sDesc);
    Memo.Lines.Assign(xmlDoc.XML);
  end;
end;

end.
Grüße vom marabu
  Mit Zitat antworten Zitat