2009-07-24 12 views
7

मैं XmlTextWriter और उसके WriteElementString विधि, उदाहरण के लिए उपयोग कर रहा हूँ:सी #: XmlTextWriter.WriteElementString खाली तारों पर विफल रहता है?

XmlTextWriter writer = new XmlTextWriter("filename.xml", null); 

writer.WriteStartElement("User"); 
writer.WriteElementString("Username", inputUserName); 
writer.WriteElementString("Email", inputEmail); 
writer.WriteEndElement(); 

writer.Close(); 

उम्मीद XML आउटपुट है:

<User> 
    <Username>value</Username> 
    <Email>value</Email> 
</User> 

हालांकि, अगर उदाहरण के लिए inputEmail खाली है, परिणाम एक्सएमएल मैं के रूप में मिलता है इस प्रकार है:

<User> 
    <Username>value</Username> 
    <Email/> 
</User> 

जबकि मैं इसे होने की उम्मीद करेंगे:

<User> 
    <Username>value</Username> 
    <Email></Email> 
</User> 

मैं क्या गलत कर रहा हूं? क्या XmlTextWriter का उपयोग करके एक सरल तरीके से मेरे अपेक्षित परिणाम प्राप्त करने का कोई तरीका है?

उत्तर

18

आपका आउटपुट सही है एक शॉर्टकट है। कोई सामग्री वाले तत्व को <tag/> के रूप में लिखा जाना चाहिए।

आप()

writer.WriteStartElement("Email"); 
writer.WriteString(inputEmail); 
writer.WriteFullEndElement(); 

WriteFullEndElement फोन करके पूर्ण टैग का उपयोग मजबूर कर सकते हैं कि उत्पादन <Email></Email> जब inputEmail खाली है।

public static void WriteFullElementString(this XmlTextWriter writer, 
              string localName, 
              string value) 
{ 
    writer.WriteStartElement(localName); 
    writer.WriteString(value); 
    writer.WriteFullEndElement(); 
} 

फिर अपने कोड बन जाएगा:

writer.WriteStartElement("User"); 
writer.WriteFullElementString("Username", inputUserName); 
writer.WriteFullElementString("Email", inputEmail); 
writer.WriteEndElement(); 
+0

यह समाधान मेरे अंत में अजीब तरह से काम नहीं करता है –

+0

मैंने आपके द्वारा प्रदान किए गए सटीक समाधान का उपयोग किया है, और WriteFullEndElement() विधि काम नहीं कर रही है ... इस विधि मेथिंक दोषपूर्ण है। –

+0

मुझे सी # में एक कामकाज मिला। यदि (string.Length == 0), तो खाली स्ट्रिंग को एक न्यूलाइन एस्केप कैरेक्टर के साथ प्रतिस्थापित करें, यानी "\ n" –

4

यह <Tag/> में विफल नहीं हुआ बस के लिए <Tag></Tag>

+0

आउटपुट करने के लिए इसे मजबूर करना संभव है? –

+0

मुझे ऐसा नहीं लगता है। – RaYell

+0

यदि यह कोई समस्या है, तो आपको पूरी तरह से टैग लिखने की आवश्यकता होने पर आपको चिल्लाने का अधिकार है; उन्हें मूल एक्सएमएल चश्मा का पालन करने की आवश्यकता है। – Nyerguds

2

आपका कोड होना चाहिए:

using (XmlWriter writer = XmlWriter.Create("filename.xml")) 
{ 
    writer.WriteStartElement("User"); 
    writer.WriteElementString("Username", inputUserName); 
    writer.WriteElementString("Email", inputEmail); 
    writer.WriteEndElement(); 
} 

आपको लगता है कि एक बार से अधिक करना चाहते हैं, तो आप एक विस्तार विधि बना सकते हैं

यह अपवादों के मामले में संसाधन रिसाव से बचाता है, और XmlReader बनाने के लिए उचित तरीके का उपयोग करता है (क्योंकि .NE टी 2.0)।

0

किसी को इसकी आवश्यकता होने पर यहां छोड़कर; चूंकि ऊपर दिए गए उत्तरों में से कोई भी मेरे लिए हल नहीं हुआ है, या ओवरकिल की तरह लग रहा था।

FileStream fs = new FileStream("file.xml", FileMode.Create); 
    XmlWriterSettings settings = new XmlWriterSettings(); 
    settings.Indent = true; 
    XmlWriter w = XmlWriter.Create(fs, settings); 
    w.WriteStartDocument(); 
    w.WriteStartElement("tag1"); 

     w.WriteStartElement("tag2"); 
     w.WriteAttributeString("attr1", "val1"); 
     w.WriteAttributeString("attr2", "val2"); 
     w.WriteFullEndElement(); 

    w.WriteEndElement(); 
    w.WriteEndDocument(); 
    w.Flush(); 
    fs.Close(); 

चाल XmlWriterSettings.Indent = सच सेट और XmlWriter में जोड़ने के लिए किया गया था।

संपादित करें:

वैकल्पिक रूप से आप भी

w.Formatting = Formatting.Indented; 

बजाय एक XmlWriterSettings जोड़ने का उपयोग कर सकते हैं।

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