我试图在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对How can I save an MSXML2.DomDocument with indenting? (I think it uses MXXMLWriter)的回答。
我刚刚用pascal脚本重新实现了他的javascript代码。
上述解决方案将根据MXXMLWriter类的喜好重新格式化完整的xml文档。
如果要保留所选的某种格式,必须通过添加所需的缩进来显式实现。
要在添加的节点后添加新行(13 10=crlf)并(重新)用制表符(9)缩进关闭的父标记,请使用:
RootNode.appendChild(XMLDoc.createTextNode(#13#10#9));

关于xml - Inno Setup:保存带有缩进的XML文档,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36408049/

10-10 01:49