2011-03-22 11 views
23

मुझे पता है कि इसे करने का कोई प्रत्यक्ष तरीका नहीं है लेकिन अभी भी .. क्या हम XElement तत्व को XmlNode में परिवर्तित कर सकते हैं। InnerText और InnerXml जैसे विकल्प XmlNode विशिष्ट हैं।XElement को XmlNode में परिवर्तित करना

हां, अगर मैं इन विकल्पों का उपयोग करना चाहते हैं, क्या XElementXmlNode में और इसके विपरीत परिवर्तित करने के लिए किया जा सकता है। देख Best way to get InnerXml of an XElement?

उत्तर

24

यहाँ स्ट्रिंग से परिवर्तित XmlNode को XElement के लिए और वापस XElement के लिए -

+0

आप आयात नोड https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.importnode(v=vs.110).aspx – seabass

1

तरीके XElement से InnerXml मिल रहे हैं। XElement पर ToString() XmlNode पर OuterXml के समान है।

XElement xE = XElement.Parse("<Outer><Inner><Data /></Inner></Outer>"); 

    XmlDocument xD = new XmlDocument(); 
    xD.LoadXml(xE.ToString()); 
    XmlNode xN = xD.FirstChild; 

    XElement xE2 = XElement.Parse(xN.OuterXml); 
45

मैं निम्नलिखित विस्तार तरीकों का उपयोग, वे बहुत आम होने लगते हैं:

public static class MyExtensions 
{ 
    public static XElement ToXElement(this XmlNode node) 
    { 
     XDocument xDoc = new XDocument(); 
     using (XmlWriter xmlWriter = xDoc.CreateWriter()) 
      node.WriteTo(xmlWriter); 
     return xDoc.Root; 
    } 

    public static XmlNode ToXmlNode(this XElement element) 
    { 
     using (XmlReader xmlReader = element.CreateReader()) 
     { 
      XmlDocument xmlDoc = new XmlDocument(); 
      xmlDoc.Load(xmlReader); 
      return xmlDoc; 
     } 
    } 
} 
+0

कमाल का भी उपयोग कर सकते हैं :) यह बहुत मददगार –

+3

I मुझे अपेक्षित व्यवहार प्राप्त करने के लिए 'ToXmlNode' वापसी' xmlDoc.DocumentElement' बनाना था। विशेष रूप से, मेरे 'XElement' में एनोटेशन था, लेकिन मेरा' एक्सएमएलएनोड 'नहीं था। अन्यथा बहुत उपयोगी है। – tallseth

+0

'वापसी xmlDoc;' को 'वापसी xmlDoc.FirstChild' के रूप में सही किया जाना चाहिए; –

2

BrokenGlass के answer के आधार पर, आप एक XmlDocument को XmlNode एम्बेड करने के लिए, उपयोग की तुलना में चाहते हैं:

public static class MyExtensions 
{ 
    public static XmlNode ToXmlNode(this XElement element, XmlDocument xmlDoc = null) 
    { 
     using (XmlReader xmlReader = element.CreateReader()) 
     { 
      if(xmlDoc==null) xmlDoc = new XmlDocument(); 
      return xmlDoc.ReadNode(xmlReader); 
     } 
    } 
} 

नोट: यदि आप किसी दस्तावेज़ में एक नोड को डालने का प्रयास करते हैं, जो एक अलग दस्तावेज़ द्वारा बनाया गया है, तो यह एक अपवाद फेंक देगा: "नोड डालने वाला एक अलग दस्तावेज़ conte से है xt। "

1

मुझे लगता है कि सबसे छोटा रास्ता पीछा कर रहा है:

Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader) 

यही सब!