AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Wie an vorhandenen Knoten neuen Kindknoten anhängen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie an vorhandenen Knoten neuen Kindknoten anhängen?

Ein Thema von toko · begonnen am 28. Mai 2005 · letzter Beitrag vom 28. Mai 2005
Antwort Antwort
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#1

Wie an vorhandenen Knoten neuen Kindknoten anhängen?

  Alt 28. Mai 2005, 20:30
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:
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);
hänge ich an einer XML-Datei neue Datensätze an.

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ß
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: Wie an vorhandenen Knoten neuen Kindknoten anhängen?

  Alt 28. Mai 2005, 21:51
Zitat von toko:
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".
Eigentlich mit "selectSingleNode", wenn´s nur einer ist.

Zitat:
Ich weiß dann aber nicht, wie ich diesen Konten aufgreife und mit diesem arbeiten kann?
Wie auch mit deinem gezeigten Beispiel:
Delphi-Quellcode:
// <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;
Mal in die Fundstücke hier im Forum gucken, da findest du so was recht häufig.
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#3

Re: Wie an vorhandenen Knoten neuen Kindknoten anhängen?

  Alt 28. Mai 2005, 22:39
Hallo,

das mit den Attributen habe ich jetzt anders geregelt
XML-Code:
<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>
mit
Code:
tracks := XMLDoc.documentElement.selectNodes('cd['+ IntToStr(globAktCDID) +']/track');
bekomme ich die Tracks, aber auch nur weil zufällig die cdid mit der Reihenfolge in der XML-Datei übereinstimmt.
Ich bin in der MSXML-Hilfe nicht fündig geworden, wie ich attribute setzen kann.

Bei
Delphi-Quellcode:
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.
bekomme ich eine Exception der Klasse EAccessViolation.
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#4

Re: Wie an vorhandenen Knoten neuen Kindknoten anhängen?

  Alt 28. Mai 2005, 23:30
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

gruß
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:04 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