2011-07-19 16 views
7

मैं बस अपने एक्सएमएल को थोड़ा सा और कम भारी बनाने की कोशिश कर रहा हूं। मैं सी # में पता एक कुछ इस तरह कर सकते हैं:सी # में, क्या प्रत्येक नोड के लिए पूर्ण नेमस्पेस के बजाय लघु उपसर्ग का उपयोग करके XDocument उत्पन्न करने का कोई तरीका है?

XNamespace ds = "http://schemas.microsoft.com/ado/2007/08/dataservices"; 
new XElement(ds + "MyDumbElementName", "SomethingStupid"); 

और एक एक्सएमएल यह करने के लिए simliar मिलती है:

<root> 
    <MyDumbElementName xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices"> 
     SomethingStupid 
    </MyDumbElementName> 
</root> 
कुछ इस तरह के बजाय

:

<root xmlns:ds="http://schemas.microsoft.com/ado/2007/08/dataservices"> 
    <ds:MyDumbElementName> 
     SomethingStupid 
    </ds:MyDumbElementName> 
</root> 

जाहिर है दूसरे संस्करण बहुत सुंदर, पढ़ने के लिए आसान है, और कॉम्पैक्ट है। पार्स ("...") को कॉल किए बिना, कॉम्पैक्ट संस्करण के बराबर एक्सडॉक्यूमेंट उत्पन्न करने का कोई तरीका है?

आप जोखिम लेने का फैसला कर सकते हैं और "नहीं" जवाब दे सकते हैं, इस मामले में मेरा मानना ​​है कि निष्पक्ष काम करना अन्य लोगों के उत्तर देने का इंतजार है, और यदि कोई भी सभ्य उत्तर नहीं देता है तो मैं आपके " नहीं ", अन्यथा अगर कोई उत्तर प्रदान करता है, तो मैं" नहीं "को चिह्नित करूंगा। मुझे आशा है कि यह आपके लिए भी उचित लगता है।

संपादित करें: शायद मुझे थोड़ा और विशिष्ट होना चाहिए और कहें कि मैं एकाधिक नाम रिक्त स्थान का उपयोग करने में सक्षम होना चाहता हूं, केवल एक ही नहीं।

उत्तर

10

आप स्पष्ट रूप से निर्दिष्ट करने xmlns विशेषता द्वारा इस व्यवहार को ओवरराइड कर सकते हैं:

XNamespace ns = "urn:test"; 

new XDocument (
    new XElement ("root", 
     new XAttribute (XNamespace.Xmlns + "ds", ns), 
     new XElement (ns + "foo", 
      new XAttribute ("xmlns", ns), 
      new XElement (ns + "bar", "content") 
     )) 
).Dump(); 

<root xmlns:ds="urn:test"> 
    <foo xmlns="urn:test"> 
    <bar>content</bar> 
    </foo> 
</root> 

डिफ़ॉल्ट रूप से व्यवहार में लाइन xmlns निर्दिष्ट करने के लिए है।

XNamespace ns = "urn:test"; 

new XDocument (
    new XElement ("root", 
     new XElement (ns + "foo", 
      new XElement (ns + "bar", "content") 
     )) 
).Dump(); 

उत्पादन देता है:

<root> 
    <foo xmlns="urn:test"> 
    <bar>content</bar> 
    </foo> 
</root> 

तो डिफ़ॉल्ट व्यवहार अपने वांछित व्यवहार, जब नाम स्थान पहले से ही परिभाषित किया गया है को छोड़कर है:

XNamespace ns = "urn:test"; 

new XDocument (
    new XElement ("root", 
     new XAttribute (XNamespace.Xmlns + "ds", ns), 
     new XElement (ns + "foo", 
      new XElement (ns + "bar", "content") 
     )) 
).Dump(); 

<root xmlns:ds="urn:test"> 
    <ds:foo> 
    <ds:bar>content</ds:bar> 
    </ds:foo> 
</root> 
+0

अच्छा एक! धन्यवाद क्रिस :) –