我正在尝试在Inno Setup中将新节点添加到XML文件。该节点已正确添加,但下一个标记之前的换行符已删除,或者未添加任何换行符。这是我添加的节点代码:
NewNode := XMLDoc.createElement('Test');
XMLDoc.setProperty('SelectionLanguage', 'XPath');
RootNode := XMLDoc.selectSingleNode('//Configuration/AppSettings');
RootNode.appendChild (NewNode);
RootNode.lastChild.text :='New Node';
这是我的XML文件:
<Configuration>
<AppSettings Name="General Settings">
<StartTime/>
<StopTime/>
<TimeBetweenTests>30</TimeBetweenTests>
<Port>600</Port>
<Test>New Node</Test></AppSettings>
</Configuration>
我期待标签
</AppSettings>
保持在新行中,就像添加新节点之前一样。如何添加换行符以保持格式的可读性?
您可以使用MXXMLWriter
class进行格式化:
procedure SaveXmlDocumentWithIndent(XmlDocument: Variant; FileName: string);
var
Writer: Variant;
Reader: Variant;
FSO: Variant;
TextStream: Variant;
begin
Writer := CreateOleObject('Msxml2.MXXMLWriter');
Reader := CreateOleObject('MSXML2.SAXXMLReader');
FSO := CreateOleObject('Scripting.FileSystemObject');
TextStream := FSO.CreateTextFile(FileName, True);
Writer.Indent := True;
Writer.OmitXMLDeclaration := True;
Reader.ContentHandler := Writer;
Reader.Parse(XmlDocument);
TextStream.Write(Writer.Output);
TextStream.Close();
end;
鸣谢:@cheeso对如何使用缩进保存MSXML2.DomDocument的答案?(我认为它使用MXXMLWriter)。
我刚刚在Pascal Script中重新实现了他的JavaScript代码。
上面的解决方案将根据MXXMLWriter
类的喜好重新格式化完整的XML文档。
如果要保留自己选择的某种格式,则必须通过添加所需的缩进来显式地实现它。
要#13#10
在添加的节点之后添加新行(= CRLF)并用制表符(#9
)缩进结束的父标记,请使用:
RootNode.appendChild(XMLDoc.createTextNode(#13#10#9));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句