2016-04-04 18 views
3

Inno SetupのXMLファイルに新しいノードを追加しようとしています。ノードは正しく追加されましたが、次のタグが削除されるか改行が追加される前に改行が追加されました。ここ は私の追加ノードのコードです:ここで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> 

が改行に滞在し期待していました新しいノードの追加。 改行を追加してフォーマットをより読みやすくするにはどうすればよいですか?

答えて

2

あなたはフォーマットのため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's answer to How can I save an MSXML2.DomDocument with indenting?
私はパスカルスクリプトの彼のJavaScriptコードを再実装しました。


上記の溶液はMXXMLWriterクラスの好みに応じた完全なXML文書を再フォーマットします。

選択した書式を保持する場合は、必要な字下げを追加して明示的に実装する必要があります。

追加したノードの後に​​新しい行(#13#10 = CRLF)を追加すると(再)、タブ文字(#9)とクロージング親タグをインデントの使用:

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

おかげ@Martin 、この行はトリックでした! – ZeevT

関連する問題