मेरे पास एक एक्सडोकॉल है जो मैं एक बाइट सरणी (टीसीपी/आईपी पर प्राप्त) से बना हूं।लिंक-टू-एक्सएमएल XElement.Remove() अवांछित व्हाइटस्पेस छोड़ देता है
मैं तो विशिष्ट एक्सएमएल नोड्स (XElements) के लिए और XElement.Remove फोन करके Xdocument के बंद मूल्य 'पॉप' यह पुन: प्राप्त करने के बाद() खोज करते हैं। मेरे सभी पार्सिंग पूर्ण होने के बाद, मैं उस XML को लॉग इन करने में सक्षम होना चाहता हूं जिसे मैंने पार्स नहीं किया है (एक्सडी दस्तावेज़ में शेष xml)। समस्या यह है कि अतिरिक्त सफेद जगह है जो तब भी बनी हुई है जब XElement.Remove() को बुलाया जाता है। शेष xml में शेष प्रारूप को संरक्षित करते समय मैं इस अतिरिक्त सफेद जगह को हटाने का सबसे अच्छा तरीका जानना चाहता हूं।
उदाहरण/नमूना कोड
मैं सॉकेट पर निम्नलिखित एक्सएमएल प्राप्त होता है:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
और मैं इस xml पार्स और XElements के एक नंबर को दूर करने के लिए निम्न कोड का उपयोग करें:
private void socket_messageReceived(object sender, MessageReceivedEventArgs e)
{
XDocument xDoc;
try
{
using (MemoryStream xmlStream = new MemoryStream(e.XmlAsBytes))
using (XmlTextReader reader = new XmlTextReader(xmlStream))
{
xDoc = XDocument.Load(reader);
}
XElement Author = xDoc.Root.Descendants("author").FirstOrDefault();
XElement Title = xDoc.Root.Descendants("title").FirstOrDefault();
XElement Genre = xDoc.Root.Descendants("genre").FirstOrDefault();
// Do something with Author, Title, and Genre here...
if (Author != null) Author.Remove();
if (Title != null) Title.Remove();
if (Genre != null) Genre.Remove();
LogUnparsedXML(xDoc.ToString());
}
catch (Exception ex)
{
// Exception Handling here...
}
}
फिर लॉगून्परस्डएक्सएमएल संदेश को भेजे गए एक्सएमएल की परिणामी स्ट्रिंग होगी:
<?xml version="1.0"?>
<catalog>
<book id="bk101">
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with XML.</description>
</book>
</catalog>
इस संक्रमित उदाहरण में यह एक बड़ा सौदा प्रतीत नहीं होता है, लेकिन मेरे वास्तविक अनुप्रयोग में बचे हुए एक्सएमएल बहुत खराब दिखते हैं। मैंने XDocument.ToString अधिभार का उपयोग करने का प्रयास किया है जो किसी भी लाभ के लिए SaveOptions enum लेता है। मैंने xDoc.Save को SaveOptions enum का उपयोग करके फ़ाइल में सहेजने के लिए भी कॉल करने का प्रयास किया है। मैंने कुछ अलग linq प्रश्नों के साथ प्रयोग करने का प्रयास किया जो व्हाइटस्पेस को हटाने का प्रयास करने के लिए XElement.Nodes().OfType<XText>()
का उपयोग करता था, लेकिन अक्सर मैं सफेद जगह लेना चाहता था जिसे मैं छुटकारा पाने की कोशिश कर रहा हूं।
सहायता के लिए अग्रिम धन्यवाद।
जो
'ToString() 'कॉल पर' SaveOptions.DisableFormatting' 'पर विकल्प सेट करने का प्रयास करें। –