2012-04-18 13 views
7

Özgün olarak boşluk girintileri (her iç içe geçmiş öğe için 2 boşluk) kullanılarak biçimlendirilmiş bir XML dosyasına sahibim.IXMLDocument.SaveToFile() boşluk yerine girinti için sekme karakterini kullanır

Bu dosyayı IXMLDocument kullanarak yükleyip kaydettiğimde, boşluk girintileri sekme karakterlerini değiştiriyor (kod no. 9). İşte

kodudur:

var 
    FileName: String; 
    Document: IXMLDocument; 
... 
Document := XMLDoc.LoadXMLDocument(FileName); 
Document.SaveToFile(FileName); 

Ben NodeIndentStr özelliğini kullanmaya çalıştı - hayır sonucu:

Document := XMLDoc.LoadXMLDocument(FileName); 
Document.NodeIndentStr := ' '; 
Document.SaveToFile(FileName); 

çok FormatXMLData kullanılmış - hayır sonucu:

Document := XMLDoc.LoadXMLDocument(FileName); 
Document.XML.Text := XMLDoc.FormatXMLData(Document.XML.Text); 
Document.Active := True; 
Document.SaveToFile(FileName); 

Ben nasıl sekme karakterleri yerine boşluk girintileriyle kaydetmek

+1

Sen Zarko Gajic bu makaleyi okumak isteyebilirsiniz, [Delphi formatlı-xml-düğüm-girinti] (http://delphi.about.com/od/delphitips2009 /qt/delphi-format-xml-node-indent.htm). Sağlanan çözüm, dosyayı güzel bir şekilde biçimlendirmek için 'xmlDoc.FormatXMLData' kullanır. –

+0

@LURD denedi - sonuç yok :( – Andrew

+0

Sorunun nerede olduğunu şimdi görüyorum, 'FormatXMLData'' 'NodeIndentStr' 'nün bu işleve bir dize iletildiğinden bu yana ne kullandığını bilmiyor, dolayısıyla varsayılan SEKME'yi kullanıyor char – TLama

cevap

11

IXMLDocument'da ayrıştırıcının beyaz alanları korumak için söylenebileceği bir seçenek var.

böyle kullanın:

Document.ParseOptions := 
    Document.ParseOptions+[poValidateOnParse]+[poPreserveWhiteSpace]; 

Yasal Uyarı: Ben denemedim.

+0

+1. Ben şimdi D5 üzerinde ve Delphi'nin daha yeni sürümleri ile test edemem, ama 'IXMLDocument' 'IXMLDOMDocument' etrafında bir sarıcı ise, bu çalışması gerekir (IXMLDOMDocument 'ile test edilmiştir). – kobik

+1

evet, işe yarıyor. Teşekkür ederim. Not: 'ParseOptions',' LoadFromFile() ' – Andrew

+0

+1 'den benden de önce ayarlanmalıdır. Bu hile yapar. Belki de 'NodeIndentStr' veya' doNodeAutoIndent' seçeneğinin kullanılmasına gerek olmadığını belirtmekle iyi olur, çünkü 'FormatXMLData' işlevine (belgenin kendisi değil) string iletirsiniz, böylece kendi ayarları vardır. Ve 'poValidateOnParse' işaretini kaldırabilirsiniz ;-) – TLama

0

Farklı olandan emin değilim ama Document.ParseOptions + [poValidateOnParse, poPreserveWhiteSpace]; benim için uygun değildi. benzer

şey çalıştı:

var 
    xmlDoc: IXMLDOMDocument2; 

xmlDoc := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument2; 
xmlDoc.validateOnParse := True; 
xmlDoc.preserveWhiteSpace := True; 
İlgili konular