gpt4 book ai didi

xml - Inno 安装程序 : Save XML document with indentation

转载 作者:数据小太阳 更新时间:2023-10-29 02:34:08 26 4
gpt4 key购买 nike

我正在尝试在 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 Script 重新实现了他的 JavaScript 代码。


上述解决方案将根据 MXXMLWriter 类的喜好重新格式化完整的 XML 文档。

如果你想保留你选择的某种格式,你必须通过添加你想要的缩进来明确地实现它。

在添加的节点后添加新行 (#13#10 = CRLF) 并使用制表符 (#9) 缩进结束父标签), 使用:

RootNode.appendChild(XMLDoc.createTextNode(#13#10#9));

关于xml - Inno 安装程序 : Save XML document with indentation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com