2012-04-18 18 views
7

के बजाय इंडेंटेशन के लिए टैब वर्ण का उपयोग करता है मेरे पास एक एक्सएमएल फ़ाइल है, जिसे मूल रूप से स्पेस इंडेंट्स (प्रत्येक नेस्टेड आइटम के लिए 2 रिक्त स्थान) का उपयोग करके स्वरूपित किया जाता है।IXMLDocument.SaveToFile() रिक्त स्थान

जब मैं IXMLDocument का उपयोग करके इस फ़ाइल को लोड और सहेजता हूं, तो स्पेस इंडेंट टैब वर्णों (कोड # 9) में बदल रहे हैं।

यहाँ कोड है:

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

मैं NodeIndentStr संपत्ति का उपयोग करने की कोशिश की है - कोई परिणाम:

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

भी प्रयुक्त FormatXMLData - कोई परिणाम:

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

मैं कैसे कर सकता है टैब वर्णों के बजाय स्पेस इंडेंट्स के साथ सहेजें?

+1

आप Zarko Gajic द्वारा इस लेख को पढ़ने के लिए चाहते हो सकता है, [डेल्फी प्रारूप-एक्सएमएल नोड-मांगपत्र] (http://delphi.about.com/od/delphitips2009 /qt/delphi-format-xml-node-indent.htm)। प्रदान किया गया समाधान फ़ाइल को प्रारूपित करने के लिए 'xmlDoc.FormatXMLData' का उपयोग करता है। –

+0

@LURD ने कोशिश की - कोई परिणाम नहीं :( – Andrew

+0

मुझे लगता है कि समस्या अब कहां है, 'FormatXMLData' को यह जानने का कोई मौका नहीं है कि आप उस कार्य में स्ट्रिंग को पारित करने के बाद' NodeIndentStr' क्या उपयोग कर रहे हैं, इस प्रकार यह डिफ़ॉल्ट टैब का उपयोग करता है । चार – TLama

उत्तर

11

IXMLDocument में एक विकल्प है जहां पार्सर को सफेद रिक्त स्थान को संरक्षित करने के लिए कहा जा सकता है।

इस तरह यह प्रयोग करें:

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

अस्वीकरण: मैं इसे करने की कोशिश नहीं की है।

+0

+1। मैं अब डी 5 पर हूं, और डेल्फी के नए संस्करणों के साथ इसका परीक्षण नहीं कर सकता, लेकिन यदि 'IXMLDocument'' IXMLDOMDocument' के आसपास एक रैपर है तो इसे काम करना चाहिए ('IXMLDOMDocument' के साथ परीक्षण किया जाना चाहिए)। – kobik

+1

हाँ, यह काम करता है। धन्यवाद। नोट: 'ParseOptions' को' LoadFromFile() ' – Andrew

+0

+1 से पहले भी सेट किया जाना चाहिए। यह चाल है। शायद यह उल्लेख करना ठीक होगा कि 'NodeIndentStr' और न ही' doNodeAutoIndent' विकल्प 'का उपयोग करने की आवश्यकता नहीं है क्योंकि आप' FormatXMLData' फ़ंक्शन (स्वयं दस्तावेज़ नहीं) पर स्ट्रिंग पास कर रहे हैं, इस प्रकार इसकी अपनी सेटिंग्स हैं। और आप 'poValidateOnParse' ध्वज को हटा सकते हैं ;-) – TLama

0

मुझे यकीन नहीं है कि अलग क्या है लेकिन दस्तावेज़। पैरासेप्शन + [poValidateOnParse, poPreserveWhiteSpace]; मेरे लिए उपलब्ध नहीं था।

कुछ इसी तरह काम किया:

var 
    xmlDoc: IXMLDOMDocument2; 

xmlDoc := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument2; 
xmlDoc.validateOnParse := True; 
xmlDoc.preserveWhiteSpace := True; 
संबंधित मुद्दे