2011-12-22 11 views
6

मैं LINQ में XDocument का उपयोग कर रहा हूं (डालने) और xml दस्तावेज़ को सहेजने के लिए। doc.Save से पहलेxdocument सहेजें टैग के अंदर सफेद स्थान को सुरक्षित रखें

XDocument doc = XDocument.Load("c:\\sample.xml", LoadOptions.PreserveWhitespace); 
doc.Save("c:\\sample.xml",SaveOptions.DisableFormatting) 

sample.xml:

<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2" > 
    value 
</ELEMENT> 

sample.xml के बाद doc.Save

<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2"> 
    value 
</ELEMENT> 

जैसा कि आप देख सकते हैं, वहाँ है ATTRIB1 और एक एकल के बाद डबल अंतरिक्ष मूल दस्तावेज़ में ATTRIB2 के बाद स्थान। लेकिन जब मैं doc.save को कॉल करता हूं तो इन रिक्त स्थान को linq द्वारा हटा दिया गया है।

मैं टैग के अंदर सफेद जगहों को कैसे संरक्षित कर सकता हूं?

+1

आपको इसकी आवश्यकता क्यों होगी? – ChrisWue

+7

यह आवश्यकता है ...... – Rocky

उत्तर

11

मेरा मानना ​​है कि LoadOptions.PreserveWhitespace और SaveOptions.DisableFormatting केवल इंडेंटेशन और टेक्स्ट नोड्स की सामग्री के मामले में व्हाइटस्पेस को संभालने के तरीके पर XDocument को निर्देश देते हैं। यह अभी भी गुणों को सामान्यीकृत करेगा, आदि

आप एक अधिभार का उपयोग करना चाह सकते हैं जहां आप एक एक्सएमएलवाइटर निर्दिष्ट करते हैं जो कि आप जो चाहते हैं उसे करने के लिए कॉन्फ़िगर किया गया है, और यदि आपको डिफ़ॉल्ट XmlTextWriter के साथ काम करने वाला कॉन्फ़िगरेशन नहीं मिल रहा है, आप हमेशा अपना खुद का एक्सएमएलवाइटर बना सकते हैं।

1

ये "महत्वपूर्ण सफेद जगह नहीं हैं" और के पल में हटाए गए हैं एक्सएमएल। जब तक आप कॉल करते हैं, तब तक गुणों के बीच अंतर के बारे में कोई जानकारी नहीं होती है। (ध्यान दें कि विशेष रूप से गुणों का क्रम भी बोलना ज्ञात नहीं है क्योंकि इसका एक्सएमएल में कोई महत्व नहीं है)।

यदि आप XML को किसी ऐसे तरीके से पढ़ना/लिखना चाहते हैं जो सीधे XML मानक द्वारा समर्थित नहीं है, तो आपको कुछ कस्टम हैंडलिंग प्रदान करने की आवश्यकता है। आवश्यकताओं के आधार पर कस्टम XmlWriter पर्याप्त हो सकता है (यानी यदि आप 2 सफेद जगहों के साथ समान रूप से अलग विशेषताओं को चाहते हैं) या यदि आप वास्तव में मूल XML से जानकारी को संरक्षित करना चाहते हैं तो आपको संपूर्ण स्टैक (पाठकों/लेखकों/नोड्स) को स्वयं बनाना होगा (इसका इलाज करना पाठ के रूप में, एक्सएमएल नहीं)।

+0

यह सही नहीं लगता है। मेरा मानना ​​है कि यह सहेजने के दौरान सुधार हुआ है, पढ़ा नहीं। और यहां तक ​​कि अगर यह सच था, तो दस्तावेज़ीकरण सचमुच झूठ बोल रहा है; आप 'LoadOptions.PreserveWhitespace' के लिए प्रलेखन नोटिस करेंगे" पार्सिंग के दौरान महत्वहीन सफेद स्थान को संरक्षित करता है। " और 'SaveOptions.DisableFormatting' के लिए प्रलेखन पढ़ता है "धारावाहिक करते समय सभी महत्वहीन सफेद स्थान को संरक्षित करें।"। – BrainSlugs83

+0

इस एक्सएमएल के बारे में भी टिप्पणी मानक द्वारा समर्थित नहीं है, अगर यह मानक द्वारा समर्थित नहीं है, तो यह वैध एक्सएमएल नहीं होगा, और एक अपवाद पार्सिंग समय पर फेंक दिया जाएगा। – BrainSlugs83

+0

@ BrainSlugs83 - ध्यान दें कि XML बिंदु दृश्य से महत्वपूर्ण/महत्वहीन व्हाइटस्पेस केवल तत्व की सामग्री के अंदर माना जाता है (प्रारंभ टैग में नहीं जहां विशेषताएँ हैं) - इसलिए गुणों के बीच 2 रिक्त स्थान "व्हाइटस्पेस" नहीं माना जाता है बल्कि गुणों के लिए सिंटैक्स विभाजक । तो मुझे यकीन नहीं है कि आपको क्यों लगता है कि 'PreserveWhitespace' पर प्रभाव होना चाहिए कि गुणों के बीच की जगहों को कैसे नियंत्रित किया जाता है। अधिक औपचारिक परिभाषा के लिए http://www.w3.org/TR/2000/REC-xml-20001006#sec-white-space देखें। –

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