2010-12-10 17 views
12

सभी, मैं एक साबुन लिफाफा xml दस्तावेज़ उदाहरण बनाना चाहता हूं।मैं .NET में XAttribute में नेमस्पेस उपसर्ग कैसे सेट करूं?

<soap:Envelope soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding" xmlns:soap="http://www.w3.org/2001/12/soap-envelope"></soap:Envelope> 

मैं System.Xml.Linq उपयोग कर रहा हूँ यह करने के लिए, लेकिन मैं encodingStyle विशेषता को soap उपसर्ग जोड़ने का तरीका समझ नहीं सकता।

XNamespace ns = XNamespace.Get("http://www.w3.org/2001/12/soap-envelope"); 
XAttribute prefix = new XAttribute(XNamespace.Xmlns + "soap", ns); 
XAttribute encoding = new XAttribute("encodingStyle", "http://www.w3.org/2001/12/soap-encoding"); 

XElement envelope = new XElement(ns + "Envelope", prefix, encoding); 

जो मुझे देता है

<soap:Envelope encodingStyle="http://www.w3.org/2001/12/soap-encoding" xmlns:soap="http://www.w3.org/2001/12/soap-envelope"></soap:Envelope> 

आप XAttribute का उपयोग एक तत्व के लिए एक उपसर्ग जोड़ने के लिए, मैं XAttribute उपयोग कर सकते हैं एक XAttribute करने के लिए एक उपसर्ग जोड़ने के लिए:

अब तक, मैं इस राशि ??!

धन्यवाद, पी

उत्तर

9

नाम स्थान का उल्लेख करें (ns + "encodingStyle" का उपयोग करके) 'encodingStyle' XAttribute बनाएँ:

XAttribute encoding = new XAttribute(ns + "encodingStyle", "http://www.w3.org/2001/12/soap-encoding"); 

two-parameter XAttribute constructor पहला तर्क के रूप में एक XName लेता है। यह (ऊपर के रूप में) बनाने के लिए (जैसा कि आपके प्रश्न में कोड में है), या सीधे string को XNamespace पर "जोड़कर" जोड़कर बनाया जा सकता है।

+1

धन्यवाद। क्या यह सिर्फ मुझे है या यह वास्तव में खराब डिजाइन एपीआई है? कुछ "चालाक" ऑपरेटर ओवरलोडिंग लेकिन कोई कन्स्ट्रक्टर अधिभार एक ही काम नहीं करता है? क्या? –

+0

ध्यान दें कि XAttribute कन्स्ट्रक्टर 'XName' लेता है। 'स्ट्रिंग' का' एक्सनाम 'में एक निहित रूपांतरण है, लेकिन आप एक स्ट्रिंग नाम में' XNamespace' "जोड़कर भी बना सकते हैं। System.Xml.Linq ऑपरेटर ओवरलोडिंग और निहित/स्पष्ट रूपांतरण ऑपरेटर का व्यापक रूप से उपयोग करता है; उदाहरण के लिए, '(int) elem.Attribute (" count ")' 'count' विशेषता (' elem' पर) के स्ट्रिंग मान को पढ़ेगा, इसे पूर्णांक के रूप में पार्स करें, और मान वापस कर देगा। यह बहुत खोजने योग्य नहीं है, लेकिन परिणाम बहुत संक्षेप/terse/समझ में नहीं आता है (उपयुक्त के रूप में हटाएं) कोड। –

1

आपको XNamespace के साथ अपने XAttribute के XName को गठबंधन करने की आवश्यकता है। मुझे सही पता है ... किसी भी तरह से इसे आजमाएं।

XNamespace soap = "http://www.w3.org/2001/12/soap-envelope"; 
XAttribute encoding = new XAttribute(soap + "encodingStyle", 
    "http://www.w3.org/2001/12/soap-encoding"); 
+0

ध्यान दें कि आपके पास पहले से ही XNamespace "ns" है। मैंने इसे "साबुन" नाम दिया ताकि यह और स्पष्ट हो सके कि यह क्या कर रहा है। – Josh

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