![]() |
Wie an vorhandenen Knoten neuen Kindknoten anhängen?
Hallo,
ich lese aus einer xml-Datei Datensätze aus und möchte diese verändern. Mein Problem ist dabei, wie ich an einem vorhandenen Kindknoten, der nicht der letzte ist, einen neuen Kindknoten anhänge. Mit
Delphi-Quellcode:
hänge ich an einer XML-Datei neue Datensätze an.
newSub1 := xmlDoc.createElement('Kind in erster Ordnung');
newSub2 := xmlDoc.createElement('Kind in zweiter Ordnung'); newSub2.text := 'bla bla'; newSub1.appendChild(newSub2); xmlDoc.documentElement.appendChild(newSub1); xmlDoc.save(frmMain.xmlfile); Wenn ich jetzt also mittendrin an einem vorhandenen Knoten einen Kindknoten hinzufügen möchte, müsste ich doch nach diesem suchen, z.B. mit "select Nodes". Ich weiß dann aber nicht, wie ich diesen Konten aufgreife und mit diesem arbeiten kann? Bin sehr froh, wenn mir Jemand helfen kann. Gruß |
Re: Wie an vorhandenen Knoten neuen Kindknoten anhängen?
Zitat:
Zitat:
Delphi-Quellcode:
Mal in die Fundstücke hier im Forum gucken, da findest du so was recht häufig. ;)
// <IrgendwasmitCD>
// <cd id="1"></cd> // <cd id="2"></cd> // <cd id="3"></cd> // </IrgendwasmitCD> // sucht den <cd>-Knoten mit dem Attribut id="1" node := xmlDoc.selectSingleNode('/IrgendwasmitCD/cd[@id="1"]'); if node <> nil then begin newNode := xmldoc.createElement('bla'); node.appendChild(newNode); end; |
Re: Wie an vorhandenen Knoten neuen Kindknoten anhängen?
Hallo,
das mit den Attributen habe ich jetzt anders geregelt
XML-Code:
mit
<cdorganizer>
<cd> <cdid>1</cdid> <cdtitel>testtitel1</cdtitel> <interpret>testinterpret1</interpret> <genre>testgenre1</genre> <track> <trackid>1</trackid> <tracktitel>track 1</tracktitel> <dauer>3:11:07</dauer> </track> </cd> </cdorganizer>
Code:
bekomme ich die Tracks, aber auch nur weil zufällig die cdid mit der Reihenfolge in der XML-Datei übereinstimmt.
tracks := XMLDoc.documentElement.selectNodes('cd['+ IntToStr(globAktCDID) +']/track');
Ich bin in der MSXML-Hilfe nicht fündig geworden, wie ich attribute setzen kann. Bei
Delphi-Quellcode:
bekomme ich eine Exception der Klasse EAccessViolation.
procedure TfrmCD.btnOKClick(Sender: TObject);
var newsub, newcd : IXMLDOMNode; newattribute : IXMLDOMAttribute; begin newattribute := frmMain.xmlDoc.createAttribute('id'); newattribute.value := '1'; newcd := frmMain.xmlDoc.createElement('cd').setAttributeNode(newattribute); newsub := frmMain.xmlDoc.createElement('cdid'); newsub.text := IntToStr(frmMain.strgrdCDListe.RowCount); newcd.appendChild(newsub); newsub := frmMain.xmlDoc.createElement('cdtitel'); newsub.text := edtTitel.Text; newcd.appendChild(newsub); newsub := frmMain.xmlDoc.createElement('interpret'); newsub.text := edtInterpret.Text; newcd.appendChild(newsub); newsub := frmMain.xmlDoc.createElement('genre'); newsub.text := edtGenre.Text; newcd.appendChild(newsub); frmMain.xmlDoc.documentElement.appendChild(newcd); frmMain.xmlDoc.save(frmMain.xmlfile); close; end. |
Re: Wie an vorhandenen Knoten neuen Kindknoten anhängen?
Hallo,
ich habs hier gerade im Forum gefunden. Ich hatte noch einen Typfehler. Bei mir war newcd und newsub nicht vom Typ IXMLDOMElement sondern vom Typ IXMLDOMNode. funzt jetzt aber :thumb: gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 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