2015-03-10 10 views
5

.NET XmlDocument का एक दिलचस्प व्यवहार है जब XmlDocument.Save(TextWriter) का उपयोग करके सुंदर-प्रिंट मिश्रित सामग्री नोड्स।XmlDocument मिश्रित सामग्री सुंदर मुद्रण व्यवहार के पीछे तर्क क्या है?

व्यवहार को सारांशित किया जा सकता है "एक बार जब सुंदर प्रिंटर एक टेक्स्ट नोड का सामना कर लेता है, तो यह शेष मौजूदा उपखंड के लिए इंडेंटेशन और स्वचालित न्यूलाइन को अक्षम करता है"।

<?xml version='1.0'?> 
<root><test><child1/><child2/>foo<child3><child4/></child3></test></root> 

सुंदर

<?xml version="1.0"?> 
<root> 
    <test> 
    <child1 /> 
    <child2 />foo<child3><child4 /></child3></test> 
</root> 

यह व्यवहार करने के लिए प्रिंट होता है सही है और न ही सहज ज्ञान युक्त प्रतीत नहीं होता:

यहाँ एक उदाहरण (http://ideone.com/b1WxD7) है। XmlDocument ऐसा क्यों काम करता है?

+0

आपको उस विधि का जिक्र करना चाहिए जिसका उपयोग आप सुंदर प्रिंट करने के लिए करते हैं। –

+0

पोस्ट में कोड का एक लिंक है; मैं थोड़ा स्पष्ट कर दूंगा। – zeuxcg

+0

* कोड का एक लिंक * काम नहीं करेगा। यदि कोड प्रश्न का हिस्सा है, तो इसे यहां प्रश्न में, और ऑफ-साइट स्थान पर नहीं होना चाहिए। –

उत्तर

3

यह व्यवहार दुर्भाग्यपूर्ण है, लेकिन मुझे लगता है कि यह XmlTextWriter के लिए Formatting.Indented विकल्प का वर्णन (जो XmlDocument.Save यहाँ क्या उपयोग कर रहा है) से समझाया जा सकता: अनुसार इंडेंट किए जाने की

कारण बच्चे तत्वों Indentation और IndentChar सेटिंग्स पर। यह विकल्प केवल तत्व सामग्री को इंडेंट करता है; मिश्रित सामग्री प्रभावित नहीं है। कैसे एक पता XmlTextWriter करता है:

इस विकल्प के इरादे

<p>Here is some <b>bold</b> text.</p> 

तरह एक्सएमएल के स्वरूपण को संरक्षित करने और यह

<p> 
    Here is some 
    <b> 
     bold 
    </b> 
    text. 
</p> 

के रूप में पुन: स्वरूपित लेकिन वहाँ एक समस्या है नहीं है तत्व मिश्रित सामग्री है? चूंकि XmlTextWriter non-cached, forward-only लेखक है, तो उत्तर यह है कि नहीं है जब तक कि यह वास्तव में चरित्र डेटा से मुकाबला नहीं करता है। उस बिंदु पर, यह "मिश्रित सामग्री" मोड में स्विच करता है और स्वरूपण को दबाता है। दुर्भाग्यवश, बाल नोड्स के स्वरूपण को पूर्ववत करना बहुत देर हो चुकी है जो अंतर्निहित धारा में पहले से ही लिखी गई हैं।

+0

आह, दाएं - मुझे "केवल आगे" भाग याद आया और यह सोच रहा था कि यह बच्चों को स्कैन नहीं कर सकता है कि सामग्री मिश्रित है या नहीं। धन्यवाद! – zeuxcg

संबंधित मुद्दे