我有一個使用OmniXML的Delphi程序加載的xml文檔。我如何用xml字符串定義的新節點替換特定的節點?或者,換句話說,如何編輯節點的xml表示並應用更改? 喜歡的東西XMLNode.SetXML(NewXML:字符串):如何在OmniXML中替換節點xml?
XMLNode.SetXML('<Test><TestNode>This is a test</TestNode></Test>');
我有一個使用OmniXML的Delphi程序加載的xml文檔。我如何用xml字符串定義的新節點替換特定的節點?或者,換句話說,如何編輯節點的xml表示並應用更改? 喜歡的東西XMLNode.SetXML(NewXML:字符串):如何在OmniXML中替換節點xml?
XMLNode.SetXML('<Test><TestNode>This is a test</TestNode></Test>');
我不能找到一種方法,實際上取代了新的XML(尤其是如果XML有多個級別的節點)的節點現有的XML。
但是,我弄清楚瞭如何完成你想要做的事情。
ReplaceNode
)。下面是一個簡單的示例控制檯應用程序,使用以下XML開始(保存在本機的本地文件夾中的test.xml
)。 XML文件包含這個內容(我略去了XML處理指令,但代碼與它):
<AddInList>
<AddInItem>
<Title>Original title</Title>
<Description>Original description</Description>
</AddInItem>
</AddInList>
代碼:
program XMLReplaceNodeContent;
{$APPTYPE CONSOLE}
uses
SysUtils,
OmniXML,
OmniXMLUtils;
var
XMLDoc: IXMLDocument;
TempDoc: IXMLDocument;
OldNode, NewNode, NodeToDelete: IXMLNode;
const
XMLFile = 'e:\tempfiles\Test.xml';
NewXML = '<AddInItem>' +
'<Title>This is a test node</Title>' +
'<Description>New description</Description>' +
'</AddInItem>';
begin
XMLDoc := CreateXMLDoc;
// Turn off any formatting. We'll add it back later, if you want
XMLDoc.PreserveWhiteSpace := False;
XMLDoc.Load(XMLFile);
TempDoc := CreateXMLDoc;
TempDoc.PreserveWhiteSpace := False;
TempDoc.LoadXML(NewXML);
XMLDoc.SelectSingleNode('AddInList', OldNode);
OldNode.SelectSingleNode('AddInItem', NodeToDelete);
// Create replacement node(s) from new XML
NewNode := XMLDoc.CreateElement('AddInItem');
// Copy replacement nodes to new node of original XML
CopyNode(TempDoc.DocumentElement, NewNode, True);
// Replace the original node with the new node
OldNode.ReplaceChild(NewNode, NodeToDelete);
// To prevent formatting of XML, comment this line and
// uncomment the next one
XMLSaveToFile(XMLDoc, XMLFile, ofIndent);
// XMLDoc.Save(XMLFile);
Writeln('XML with replace node saved successfully');
Readln;
end.
在Test.xml
最後的輸出:
<AddInList>
<AddInItem>
<Title>This is a test node</Title>
<Description>New description</Description>
</AddInItem>
</AddInList>
謝謝,它的工作原理!評論已丟失,例如'<! - 這是一條評論 - >'被替換爲'<#comment/>',但我可以處理。 – Ivo
太好了,謝謝!現在的問題更加清晰。 – Ivo