2016-04-04 30 views
3

Inno Setup'ta XML dosyasına yeni bir düğüm eklemeye çalışıyorum. Düğüm doğru eklenmiş, ancak bir sonraki etiketdeki yeni satır kaldırılmış veya yeni satır eklenmemiştir.Inno Kurulumu: XML belgesini girintili kaydetme

<Configuration> 
    <AppSettings Name="General Settings"> 
     <StartTime/> 
     <StopTime/> 
     <TimeBetweenTests>30</TimeBetweenTests> 
     <Port>600</Port> 
     <Test>New Node</Test></AppSettings> 
</Configuration> 

Ben eskisi gibi

</AppSettings> 

yeni satır kalmak etiketi bekliyordum: Burada

NewNode := XMLDoc.createElement('Test'); 
XMLDoc.setProperty('SelectionLanguage', 'XPath'); 
RootNode := XMLDoc.selectSingleNode('//Configuration/AppSettings'); 
RootNode.appendChild (NewNode); 
RootNode.lastChild.text :='New Node'; 

benim XML dosyasıdır: İşte benim ekleyerek düğüm kodudur yeni düğümün eklenmesi. Biçimi daha okunaklı tutmak için nasıl yeni satır ekleyebilirim?

cevap

2

Sen biçimlendirme için MXXMLWriter class kullanabilirsiniz:

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; 

Kredi: Sadece Pascal Komut onun JavaScript kodu yeniden uyguladık @cheeso's answer to How can I save an MSXML2.DomDocument with indenting?
.


yukarıdaki çözüm MXXMLWriter sınıfın beğenisine göre tam XML belgesi yeniden biçimlendirir.

Seçtiğiniz bir formatı korumak istiyorsanız, istediğiniz girintiyi ekleyerek bunu açıkça uygulamanız gerekir.

yeni bir satır eklemek için ilave düğüm ve (re) sonra bir sekme karakteri ile kapanış üst etiketi girinti (10 = CRLF # # 13) (# 9), kullanım:

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

Teşekkür @Martin , bu hat hile yaptı! – ZeevT

İlgili konular