2013-02-12 20 views
9

मैंने कोशिश की:XDocument के लिए xmlns निर्दिष्ट कैसे करें?

textBox1.Text = new XDocument(new XDeclaration("1.0", "UTF-8", "yes"), 
    new XElement("root1", new XAttribute("xmlns", @"http://example.com"), new XElement("a", "b")) 
).ToString(); 

लेकिन मैं मिलता है:

The prefix '' cannot be redefined from '' to 'http://example.com' within the same start element tag. 

मैं भी प्रतिस्थापन की कोशिश की (एक जवाब मैंने पाया के अनुसार):

XAttribute(XNamespace.Xmlns,... 

लेकिन एक त्रुटि के रूप में अच्छी तरह से मिला है।

नोट: मैं दस्तावेज़ में एक से अधिक xmlns रखने की कोशिश नहीं कर रहा हूं।

+2

शायद यह आपके लिए काम करता है: http://stackoverflow.com/a/2874572/1373170 –

उत्तर

20

XDocument एपीआई नेमस्पेस-स्कोप्ड नामों के साथ काम करता है XName उदाहरणों के रूप में है। ये काम करने के लिए काफी आसान हैं, जब तक आप स्वीकार करते हैं कि एक एक्सएमएल नाम सिर्फ एक स्ट्रिंग नहीं है, बल्कि एक स्कॉप्ड पहचानकर्ता है। यहाँ कैसे मैं यह कर दिया गया है:

var ns = XNamespace.Get("http://example.com"); 
var doc = new XDocument(new XDeclaration("1.0", "utf-8", null)); 
var root = new XElement(ns + "root1", new XElement(ns + "a", "b")); 
doc.Add(root); 

परिणाम:

<root1 xmlns="http://example.com"> 
    <a>b</a> 
</root1> 

नोट + ऑपरेटर एक XNamespace और एक String में और XName उदाहरण परिणाम के लिए स्वीकार करने के लिए ओवरलोड हो गया है।

+1

धन्यवाद। यह अजीब लगता है कि केवल एक बार नामस्थान जोड़ने के लिए _simple_ तरीका नहीं होगा। – ispiro

+1

खैर, मुझे लगता है कि यह काफी सरल है, और यह वास्तव में घर चलाता है कि आप जो कर रहे हैं वह नामों के नाम बना रहा है, केवल स्ट्रिंग्स नहीं। यदि आप नेमस्पेस के लिए कम कोड चाहते हैं, तो 'System.Xml.XmlDocument' क्लास रूट नेमस्पेस का ट्रैक रखने के लिए नेमस्पेस मैनेजर का उपयोग करता है, और आप नाटक कर सकते हैं जैसे कि यह सही हो जाने के बाद यह अस्तित्व में नहीं है। – codekaizen

+0

मेरा अगला प्रश्न देखें: http://stackoverflow.com/questions/14841517/how-can-i-add-innerxml-without-it-being-modified-in-any-way - मैं 'XmlDocument' को आजमा रहा हूं अच्छा और यह मदद नहीं कर रहा है। – ispiro

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