![]() |
XML Datei bearbeiten
Hi @all...
Wie man XML Files erstellt weiss ich und krieg das auch prima hin, nur hab ich noch nie eine Datei bearbeiten müssen... Ich möchte gerne eine bestehende XML Datei laden und ein Child an den Rootnode anfügen, nur leider keine Ahnung wie... ich hab schon tage damit verbracht aber kriegs nicht hin. Hier mein Code:
Delphi-Quellcode:
procedure addrow(strFilepath, strUser: String);
var xmlDoc: msDOMDocument; instr: IXMLDOMProcessingInstruction; nsDef: WideString; root,nNode: IXMLDOMNode; begin nsdef := 'http://innosolv.ch/namespace/isag'; xmlDoc := CoDOMDocument40.Create; if (fileexists(strFilepath) = false) then begin // Microsoft Document Object Model - create document xmlDoc := CoDOMDocument40.Create; // create Rootnode root := xmlDoc.createElement('FileCheckList'); // define processing instructions instr := xmlDoc.createProcessingInstruction('xml', 'version="1.0" encoding="utf-8"'); xmlDoc.appendChild(instr); // define rootnode and namespaces with root as IXMLDOMElement do begin setAttribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema'); setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); setAttribute('xmlns', nsDef); end; // assign rootnode xmlDoc.appendChild(root); // create the file xmlDoc.save(strFilepath); end; xmlDoc.loadXML(strFilepath); root := xmlDoc.documentElement.firstChild; nNode := root.appendChild(xmlDoc.createNode(NODE_ELEMENT,'ChildNode',nsdef)); nNode.text := strUser; xmlDoc.save(strFilepath); end; |
Re: XML Datei bearbeiten
Ungetestet, aber ich denke, das ist dein Problem:
Delphi-Quellcode:
// root := xmlDoc.documentElement.firstChild; // Falsch, documentElement ist schon das Wurzel-Element
root := xmlDoc.documentElement; Assert(Assigned(root)); // Sicherheitscheck nNode := root.appendChild(xmlDoc.createNode(NODE_ELEMENT,'ChildNode',nsdef)); nNode.text := strUser; |
Re: XML Datei bearbeiten
Danke für deine Hilfe Shima, nur leider ist immer noch irgendwas nicht i.O.
Mit folgendem Code schlug die Asseration fehl. Also der erste Teil wo das XML Dokument erstellt wird, falls es noch nicht vorhanden ist, der funktioniert einwandfrei... Das Problem muss in diesen Zeilen liegen, aber wo?!
Delphi-Quellcode:
//EDIT
xmlDoc.loadXML(strFilepath);
root := xmlDoc.documentElement; // security check Assert(Assigned(root)); nNode := root.appendChild(xmlDoc.createNode(NODE_ELEMENT,'ChildNode',nsdef)); nNode.text := strUser; xmlDoc.save(strFilepath); Ich nehms zurück, vielleicht ist doch was fehlgeschlagen beim erstellen der Datei... Wenn ich nach dem laden der Datei folgenden Code eingebe:
Delphi-Quellcode:
Kommt an der Stelle eine leere MessageBox...
showmessage(xmlDoc.text);
hat jmd eine Idee? |
Re: XML Datei bearbeiten
Moin,
da gibt es einen Unterschied zwischen den Methoden load() und loadXML(): Die erste lädt markup mittels URI, die letzte lädt markup direkt.
Delphi-Quellcode:
Grüße vom marabu
// ...
if not xmlDoc.load(strFilePath) then with xmlDoc.parseError do ShowMessage(Format('%sline %d pos %d'#13#10'%s', [ reason, line, linePos, srcText ])) else begin eRoot := doc.documentElement; node := eRoot.appendChild(doc.createNode(NODE_ELEMENT, 'ChildNode', nsDef)); node.Text := 'strUser'; doc.save(strFilePath); end; // ... |
Re: XML Datei bearbeiten
@marabu
Hat bestens funktioniert, mein Problem war loadXML() statt load() ->LOL vielen Dank an dich und an alle andern Helfer. Cheers |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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