Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi mit Attributen arbeiten (https://www.delphipraxis.net/9728-mit-attributen-arbeiten.html)

billi 2. Okt 2003 15:04


mit Attributen arbeiten
 
Hallo,
kann leider keine der in der Microsoft Hilfe zu MSXML verwendeten Programmiersprachen, dementsprechend kann ich mit den dort gegebenen Lösungen leider wenig anfangen.

Das ist mein aktueller Code:
Code:
procedure TFmain.Bstandart_speichernClick(Sender: TObject);
var
index: integer;
newBild, newThema: IXMLDOMNode;
newSub: IXMLDOMNode;
begin
xmlDoc := CoDOMDocument40.Create;
xmlDoc.setProperty('NewParser', true);
if not FileExists(fAppPath + DATABASE_FNAME) then begin
xmlDoc.loadXML('<?xml version="1.0" encoding="ISO-8859-1"?><bilderdatenbank></bilderdatenbank>');
xmldoc.save(fAppPath + DATABASE_FNAME);
end else
xmlDoc.load(fAppPath + DATABASE_FNAME);
if xmlDoc.parseError.errorCode <> 0 then begin
MessageDlg('Die XML-Datei ist nicht korrekt!' + #13#10
+'Der MovieOrganizer wird nun beendet.',
mtError, [mbOK], 0);
Application.Terminate;
if xmlDoc.documentElement.nodeName <> 'bilderdatenbank' then
Application.Terminate;
end;
newThema := xmlDoc.createElement('Thema');
xmlDoc.documentElement.appendChild(newThema);
for index := 0 to ListBox1.Items.Count -1 do
begin
newBild := xmlDoc.createElement('Bild');

newSub := xmlDoc.createElement('name');
newSub.text := ListBox1.Items.Strings[Index];
newBild.appendChild(newSub);

newSub := xmlDoc.createElement('text');
newSub.text := atext;
newBild.appendChild(newSub);

newThema.appendChild(newBild);
end;
xmlDoc.documentElement.appendChild(newThema);
xmlDoc.save(fAppPath + DATABASE_FNAME);
end;
(man kann sehen, ein ganz bestimmtes Tut ist Pate gewesen :wink: )

Das würde in etwa das erzeugen (nur ohne die Schleifenausgabe...):

Code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<bilderdatenbank>
 <Thema>
  <Bild>
   <name>noch 1 tage</name>
   <text>dsrg</text>
  </Bild>
 </Thema>
</bilderdatenbank>
Jetzt würd ich gerne den Themanode mit einem Attribut versehen: name="xyz"
Wie muss ich das anstellen und wie arbeite (z.B. auslesen oder alle themanods mit dem Attribut name="xyz" suchen...)ich später damit?

vielen Dank,
billi

CalganX 2. Okt 2003 15:15

Re: mit Attributen arbeiten
 
Hi,
folgendes sollte funktionieren:
Delphi-Quellcode:
var
  newAttr: IXMLDOMNode;
{...}
newAttr := xmlDoc.createAttribute('name');
newAttr.Text := 'xyz';
newThema.attributes.setNamedItem(newAttr);
Chris

billi 3. Okt 2003 22:12

Re: mit Attributen arbeiten
 
Hallo,
damit wurde mir schon etwas geholfen.
Jetzt möchte ich nur das tun:

Wenn die Node thema mit dem Atrribut "xyz" vorhanden ist, dann füge den neuen Eintrag dort hinein, wenn nicht erstelle neue nude ...
Das hab ich versucht:
Code:
if xmlDoc.documentElement.selectSingleNode('/bilderdatenbank/thema[Attribut="' + athema + '"]') = True //in der Zeile liegt der Fehler "begraben"...
then
begin
for index := 0 to ListBox1.Items.Count -1 do
begin
newBild := xmlDoc.createElement('Bild');

newSub := xmlDoc.createElement('name');
newSub.text := ListBox1.Items.Strings[Index];
newBild.appendChild(newSub);

newSub := xmlDoc.createElement('text');
newSub.text := atext;
newBild.appendChild(newSub);

newThema.appendChild(newBild);
end;
end
else
newThema := xmlDoc.createElement('Thema');
newAttr := xmlDoc.createAttribute('name');
newAttr.Text := athema;
newThema.attributes.setNamedItem(newAttr);
xmlDoc.documentElement.appendChild(newThema);
for index := 0 to ListBox1.Items.Count -1 do
begin
newBild := xmlDoc.createElement('Bild');

newSub := xmlDoc.createElement('name');
newSub.text := ListBox1.Items.Strings[Index];
newBild.appendChild(newSub);

newSub := xmlDoc.createElement('text');
newSub.text := atext;
newBild.appendChild(newSub);

newThema.appendChild(newBild);
end;
xmlDoc.documentElement.appendChild(newThema);
xmlDoc.save(fAppPath + DATABASE_FNAME);

end;
end;
wär echt nett, wenn mir da jemand helfen könnte...
gruß
billi


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:15 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