2011-03-22 11 views

cevap

24

XmlNode'dan için XElement için dize dönüştürme ve geri XElement için bkz -

+0

Ayrıca şu adresten yardım alabilirsiniz: https://msdn.microsoft.com/en-us/library/system.xml.xmldocument.importnode(v=vs.110).aspx – seabass

1

XElement gelen InnerXml almak için yolu vardır. XElement'teki ToString(), XmlNode'daki OuterXml'ye benzer.

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

aşağıdaki uzatma yöntemleri kullanın, bunlar oldukça yaygın olduğu görülüyor:

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

harika :) bu harika yardımcı oldu –

+3

I Beklediğim davranışı almak için 'ToXmlNode' xmlDoc.DocumentElement 'döndürmek zorunda kaldı. Özellikle, benim 'XElement' ek açıklamaları vardı, ama benim 'XmlNode' yoktu. Aksi takdirde çok yararlı. – tallseth

+0

' xmlDoc döndürün; 'return xmlDoc.FirstChild; –

2

BrokenGlass en answer dayanarak, kullanım yerine, bir XmlDocument XmlNode yerleştirmek istiyorsanız:

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); 
     } 
    } 
} 

Not: bir belgeye, farklı bir belge tarafından oluşturulan bir düğüme eklemeye çalıştığınızda, bir istisna atarız: "Eklenecek düğüm farklı bir belge içeriğidir. xt."

1

Ben en kısa yolu takip ediyor düşünüyorum:

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

İşte tüm!