![]() |
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:
(man kann sehen, ein ganz bestimmtes Tut ist Pate gewesen :wink: )
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; Das würde in etwa das erzeugen (nur ohne die Schleifenausgabe...):
Code:
Jetzt würd ich gerne den Themanode mit einem Attribut versehen: name="xyz"
<?xml version="1.0" encoding="ISO-8859-1" ?>
<bilderdatenbank> <Thema> <Bild> <name>noch 1 tage</name> <text>dsrg</text> </Bild> </Thema> </bilderdatenbank> 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 |
Re: mit Attributen arbeiten
Hi,
folgendes sollte funktionieren:
Delphi-Quellcode:
Chris
var
newAttr: IXMLDOMNode; {...} newAttr := xmlDoc.createAttribute('name'); newAttr.Text := 'xyz'; newThema.attributes.setNamedItem(newAttr); |
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:
wär echt nett, wenn mir da jemand helfen könnte...
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; gruß billi |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 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