2010-01-05 6 views
48

मुझे ऐसी सामग्री को सहेजने की आवश्यकता है जिसमें कुछ XML विशेषताओं में न्यूलाइन शामिल हों, पाठ न करें। विधि को चुना जाना चाहिए ताकि मैं इसे एक्सएसएलटी 1.0/ESXLT/XSLT 2.0एक्सएमएल विशेषता में न्यूलाइन कैसे सहेजें?

में सबसे अच्छा एन्कोडिंग विधि क्या है?

कृपया सुझाव दें/कुछ विचार दें।

+0

संभव डुप्लिकेट है: // stackoverflow। कॉम/प्रश्न/44 9 627/इन-लाइन-ब्रेक-इन-एक्सएमएल-एट्रिब्यूट-वैल्यू-वैध) –

+0

ने इसी तरह के प्रश्न के लिए एक उदाहरण बनाया: http://stackoverflow.com/a/29782321/611007 – n611x007

+0

संबंधित: https://stackoverflow.com/questions/260436/ - संबंधित: https://stackoverflow.com/questions/449627/ - संबंधित: https://stackoverflow.com/questions/1289524/ – n611x007

उत्तर

64

एक अनुपालन डीओएम एपीआई में आपको कुछ भी करने की ज़रूरत नहीं है। बस विशेषता के लिए वास्तविक न्यूलाइन वर्णों को सहेजें, एपीआई उन्हें अपने आप सही ढंग से एन्कोड करेगा (Canonical XML spec, section 5.2 देखें)।

आप अपने खुद के एन्कोडिंग (अर्थात विशेषता मान सहेजने से पहले 
 साथ \n की जगह) करते हैं, एपीआई अपने इनपुट फिर सांकेतिक शब्दों में बदलना होगा, एक्सएमएल फ़ाइल में 
 हो जाती है।

नीचे पंक्ति है, स्ट्रिंग मान verbatim बचाया जाता है। आप जो भी डालते हैं, उसे हस्तक्षेप करने की आवश्यकता नहीं होती है।

हालांकि ... कुछ कार्यान्वयन अनुरूप नहीं हैं। उदाहरण के लिए, वे गुण मानों में & वर्णों को एन्कोड करेंगे, लेकिन न्यूलाइन वर्ण या टैब के बारे में भूल जाएंगे। यह आपको खोने की स्थिति में डाल देता है क्योंकि आप पहले से ही 
 के साथ न्यूलाइन को प्रतिस्थापित नहीं कर सकते हैं।

ये कार्यान्वयन न्यू लाइन पात्रों की बचत होगी unencoded, इस तरह:

<xml attribute="line 1 
line 2" /> 

इस तरह के एक दस्तावेज़ को पार्स करने पर, विशेषताओं में शाब्दिक नई पंक्तियां एक भी अंतरिक्ष में (फिर से कल्पना के अनुसार,) सामान्यीकृत कर रहे हैं - और इस तरह वे खो रहे हैं।

बचत (और बनाए रखना!) इन कार्यान्वयन में विशेषताओं में न्यूलाइन असंभव है।

+0

कुछ मैं इसमें भाग गया: एक्सएमएल यूनिक्स-स्टाइल न्यूलाइन (एलएफ) का उपयोग करता है। इसलिए यदि आप विंडोज-स्टाइल न्यूलाइन (सीआर + एलएफ) को स्टोर करना चाहते हैं, तो आपको या तो अपनी विशेषता से पढ़ने के बाद न्यूलाइन को कन्वर्ट करने की ज़रूरत होगी, या किसी भी तरह से न्यूलाइन से बचें। स्रोत: http://www.w3schools.com/xml/xml_syntax.asp – Joe

+2

@ जो: आप उस एक्सएमएल से जानकारी कहाँ लेते हैं यूनिक्स-स्टाइल न्यूलाइन का उपयोग करता है? जहां तक ​​मैं देख सकता हूं, [spec] (http://www.w3.org/TR/xml/) उस पर प्रतिबंध नहीं लगाता है। – Tomalak

+0

@Tomalak उस लिंक के नीचे नीचे स्क्रॉल करें। शीर्षक "एक्सएमएल स्टोर नई लाइन एलएफ के रूप में" शीर्षक की तलाश करें। मैंने इसे अभ्यास में भी देखा - सी # में एक्सएमएलवाइटर और तीसरे पक्ष के घटक दोनों में सीआर अक्षरों को बाहर निकाला जाता है (यूनिक्स की तरह केवल एलएफ छोड़कर)। – Joe

37

आप XML विशेषता में एक नई पंक्ति का प्रतिनिधित्व करने के लिए इकाई &#10; का उपयोग कर सकते हैं। &#13; का उपयोग कैरिज रिटर्न का प्रतिनिधित्व करने के लिए किया जा सकता है। एक विंडोज़ शैली सीआरएलएफ को &#13;&#10; के रूप में प्रदर्शित किया जा सकता है।

यह कानूनी एक्सएमएल वाक्यविन्यास है। अधिक जानकारी के लिए XML spec देखें।

+0

क्या यह एक वैध एक्सएमएल कैरेक्टर है ?? –

+0

मुझे लगता है कि मुझे इकाई के बजाय कुछ एन्कोडिंग का उपयोग करना है क्योंकि GetAttribute न्यूलाइन वाली स्ट्रिंग के साथ काम नहीं करेगा। क्या आपके पास कई विचार हैं? क्या इकाई getAttribute समस्या हल करेगी? – Tommy

+0

@ चतुरंगा चंद्रशेखर: हाँ। यह वैध एक्सएमएल है। मैंने एक्सएमएल स्पेक के लिंक को शामिल करने के लिए अपना उत्तर अपडेट किया जहां इन प्रतीकों का उल्लेख किया गया है। – Asaph

0

एक कच्चे जवाब हो सकता है:

XmlDocument xDoc = new XmlDocument(); 
xDoc.Load(@"Agenda.xml"); 
//make stuff with the xml 
//make attributes value = "\r\n" (you need both expressions to make a new line) 
string a = xDoc.InnerXml.Replace("&#xD;", "\r").Replace("&#xA;", "\n").Replace("><",">\r \n<"); 
StreamWriter sDoc = new StreamWriter(@"Agenda.xml"); 
sDoc.Write(a); 
sDoc.Flush(); 
sDoc.Dispose(); 

हो जाएगा ताकि जैसा कि आप देख सिर्फ एक स्ट्रिंग [XML विशेषता में पंक्ति विराम मान्य मान हैं?] (Http के

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