2011-03-01 21 views
5

वर्तमान फ़ाइल स्वरूपएक xml नोड

<Folio> 
<Node1>Value1</Node1> 
<Node2>Value2</Node2> 
<Node3>Value3</Node3> 
</Folio> 

वांछित आउटपुट

<vs:Folio> 
<vs:Node1>Value1</vs:Node1> 
<vs:Node2>Value2</vs:Node2> 
<vs:Node3>Value3</vs:Node3> 
</vs:Folio> 

मैं बच्चे के नोड तत्व को उपसर्ग जोड़ने के लिए XmlElement और XmlDocument उपयोग कर रहा हूँ करने के लिए एक उपसर्ग जोड़ने और मैं करने में असमर्थ हूँ इसे पूरा करो अगर कोई मुझे सही दिशा में सही धक्का दे सकता है तो मैं वास्तव में आभारी रहूंगा।

+1

मुझे लगता है कि मतलब यह होगा कि नोड नोड फोलियो से एक अलग नाम स्थान में थे लेकिन कोई डिफ़ॉल्ट Schama या नाम स्थान है विशेषता परिभाषित तो बिंदु क्या है? उपसर्ग जोड़ने के द्वारा आप वास्तव में क्या हासिल करने की कोशिश कर रहे हैं? – BenCr

+0

@benCr मुझे आशा है कि इससे मदद मिलती है। – Venki

+0

मुझे खेद है लेकिन यह नहीं है। क्या आपको कुछ प्रकार की त्रुटि मिल रही है? – BenCr

उत्तर

7

यदि आप XML दस्तावेज़ लोड करने के बाद तत्वों में नेमस्पेस जोड़ने का प्रयास कर रहे हैं तो यह संभव नहीं है।

MSDN से:

आप नहीं जोड़ने, संशोधित करने या बाद दस्तावेज़ एक्सएमएल दस्तावेज़ ऑब्जेक्ट मॉडल में लोड किया गया है एक XML दस्तावेज़ की एक उदाहरण में एक XML नामस्थान परिभाषा नष्ट कर सकते हैं (XMLDOM) पार्सर। एक्सएमएल दस्तावेज़ों का उपयोग पर किया जाता है जो XML दस्तावेज़ में डेटा का प्रतिनिधित्व करते हैं जब दस्तावेज़ को XMLDOM पार्सर में लोड किया जाता है। ये नोड्स बनाए गए बनाए जाने पर उनके XML नेमस्पेस विशेषताओं के लिए स्थायी रूप से बाध्य हैं। इसलिए, खाली एक्सएमएल नेमस्पेस घोषणा (xmlns = "") इन 0 नोड्स के डिफ़ॉल्ट XML नेमस्पेस विशेषता को संरक्षित करने के लिए इन नोड्स के बच्चे नोड्स में शामिल है।

हालांकि आप इनपुट लोड कर सकते हैं, प्रत्येक तत्व को पढ़ सकते हैं और इसे किसी अन्य दस्तावेज़ (या इन-मेमोरी) में लिख सकते हैं जिसमें नामस्थान सेट है। नीचे वह कोड है जो स्ट्रिंग xml को पार करता है, नामस्थान उपसर्ग और नामस्थान के साथ एक नया xml तत्व बनाता है।

  String xmlWithoutNamespace = 
       @"<Folio><Node1>Value1</Node1><Node2>Value2</Node2><Node3>Value3</Node3></Folio>"; 
      String prefix ="vs"; 
      String testNamespace = "http://www.testnamespace/vs/"; 
      XmlDocument xmlDocument = new XmlDocument(); 

      XElement folio = XElement.Parse(xmlWithoutNamespace); 
      XmlElement folioNode = xmlDocument.CreateElement(prefix, folio.Name.LocalName, testNamespace); 

      var nodes = from node in folio.Elements() 
         select node; 

      foreach (XElement item in nodes) 
      { 
       var node = xmlDocument.CreateElement(prefix, item.Name.ToString(), testNamespace); 
       node.InnerText = item.Value; 
       folioNode.AppendChild(node); 
      } 

      xmlDocument.AppendChild(folioNode); 

XmlDocument अब प्रत्येक नोड बनाम उपसर्ग के साथ साथ एक्सएमएल शामिल

-1
private static void SetPrefix(string prefix, XmlNode node) 
    { 
     node.Prefix = prefix; 
     foreach (XmlNode n in node.ChildNodes) 
     { 
      //if (node.ParentNode != null) 
      //{ 
      if (n.Name.Contains("QualifyingProperties")) 
      { 
       break; 
      } 
      //} 
      SetPrefix(prefix, n); 
     } 
    } 
+3

हालांकि यह तकनीकी रूप से प्रश्न का उत्तर दे सकता है, मुझे कुछ फेंकने वाले स्रोत कोड की धारणा पसंद नहीं है। क्या आप विस्तृत कर सकते हैं * कैसे * और * क्यों * यह ओपी मुद्दे हल करता है? –

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