2010-02-12 17 views
5

मुझे xml तत्व में उपसर्ग के साथ एक विशेषता को परिभाषित करने में सक्षम होना चाहिए।उपसर्ग के साथ XmlElement विशेषताएँ कैसे बनाएं?

उदाहरण के लिए

...

<nc:Person s:id="ID_Person_01"></nc:Person> 

आदेश में इस मैं यह है कि निम्नलिखित काम किया है | ऐसा करने के लिए।

XmlElement TempElement = XmlDocToRef.CreateElement("nc:Person", "http://niem.gov/niem/niem-core/2.0"); 
TempElement.SetAttribute("s:id", "http://niem.gov/niem/structures/2.0", "ID_Person_01"); 

दुर्भाग्य से, XmlElement.SetAttribute (स्ट्रिंग, स्ट्रिंग, स्ट्रिंग) उपसर्ग पार्स करने के रूप में मैं त्रुटि नीचे प्राप्त समर्थन करने के लिए प्रतीत नहीं होता।

':' चरित्र, हेक्साडेसिमल मान 0x3A, किसी नाम में शामिल नहीं किया जा सकता है।

मैं उपसर्ग के साथ एक विशेषता को कैसे परिभाषित करूं?

उत्तर

16

यदि आपने रूट नोड में अपना नामस्थान पहले ही घोषित कर दिया है, तो आपको अपरिवर्तित विशेषता नाम का उपयोग करने के लिए SetAttribute कॉल को बदलने की आवश्यकता है। तो अपने रूट नोड इस तरह एक नाम स्थान को परिभाषित करता है, तो:

<People xmlns:s='http://niem.gov/niem/structures/2.0'> 

आप ऐसा कर सकते हैं और विशेषता उपसर्ग आप पहले से ही स्थापित कर लिया है लेने जाएगा: आप अभी तक घोषित नहीं किया है

// no prefix on the first argument - it will be rendered as 
// s:id='ID_Person_01' 
TempElement.SetAttribute("id", "http://niem.gov/niem/structures/2.0", "ID_Person_01"); 

नाम स्थान (और इसके उपसर्ग), तीन-तंत्री XmlDocument.CreateAttribute अधिभार यह तुम्हारे लिए क्या करेंगे:

// Adds the declaration to your root node 
var attribute = xmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
attribute.InnerText = "ID_Person_01" 
TempElement.SetAttributeNode(attribute); 
+0

यह काम मैं पहले से ही रूट नोड में नाम स्थान था बस के पहले तर्क से उपसर्ग दूर करने के लिए किया था SetAttribute विधि। धन्यवाद! – Eddie

+1

बहुत उपयोगी। एक छोटी सी बात - एक समान/असाइनमेंट ऑपरेटर है जो 'XmlAttribute विशेषता = xmlDocToRef.' गायब है। –

1

विशेषता सीधे बनाने और तत्व में जोड़ने का प्रयास करें:

XmlAttribute attr = XmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
attr.InnerText = "ID_Person_01"; 
TempElement.Attributes.Append(attr); 
2

XMLDocument.CreateAttribute विधि 3 तारों को ले सकती है: निर्दिष्ट उपसर्ग, स्थानीय नाम और नामस्थान। फिर आप तत्व में विशेषता जोड़ सकते हैं। कुछ इस तरह आप के लिए काम कर सकते हैं:

XmlAttribute newAttribute = XmlDocToRef.CreateAttribute("s", "id", "http://niem.gov/niem/structures/2.0"); 
TempElement.Attributes.Append(newAttribute): 
0

के बाद से मेरी खोज मुझे यहाँ ले जा रहा रखा, मैं इस XElement के लिए जवाब देंगे। मुझे नहीं पता कि यह समाधान XmlElement के लिए भी मान्य है, लेकिन उम्मीद है कि कम से कम XElement का उपयोग करके दूसरों की सहायता करें, जो यहां समाप्त होते हैं।

this के आधार पर मैंने कुछ टेम्पलेट्स में सभी डेटा-नोड्स में xml:space="preserve" जोड़ा, इससे पहले कि वे अपनी सामग्री को देख और जोड़ सकें। यह अजीब कोड IMO के रूप में ऊपर दिखाए गए (मैं तीन मापदंडों पसंद करेंगे, लेकिन यह काम करता है:।।

foreach (XElement lElement in root.Descendants(myTag)) 
{ 
     lElement.Add(new XAttribute(root.GetNamespaceOfPrefix("xml") + "space", "preserve")); 
} 
संबंधित मुद्दे