2012-11-19 19 views
16

Jak przekonwertować XDocument na XElement?XDocument do XElement

Znalazłem następujące, szukając, ale jest do konwersji między XDocument i XmlDocument, a nie XDocument i XElement.

public static XElement ToXElement(this XmlElement xmlelement) 
{ 
    return XElement.Load(xmlelement.CreateNavigator().ReadSubtree()); 
} 

public static XmlDocument ToXmlDocument(this XDocument xdoc) 
{ 
    var xmldoc = new XmlDocument(); 
    xmldoc.Load(xdoc.CreateReader()); 
    return xmldoc; 
} 

Nie mogłem znaleźć niczego, aby przekonwertować XDocument na XElement. Każda pomoc będzie doceniona.

+1

Dlaczego chcesz przekonwertować XDocument do Xelement? – Diego

+2

Dlaczego to nie pomaga? – fsimonazzi

+4

Czy chcesz tylko element główny? xdoc.Root? – JohnD

Odpowiedz

26

XDocument do XmlDocument:

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load(xdoc.CreateReader()); 

XmlDocument do XDocument

XDocument xDoc = XDocument.Load(new XmlNodeReader(xmlDoc)); 

Aby uzyskać element główny z XDocument użyć xDoc.Root

25

mówili inni, ale tu jest wyraźnie zarysowany próbka do przekonwertowania XDocument na XElement:

XDocument doc = XDocument.Load(...); 
return doc.Root; 
+0

jest w odpowiedzi powyżej ... – Pawel

+5

@Pawel - Tak, ale czułem potrzebę, aby było to bardzo wyraźne, z banalną próbką kodu, ponieważ OP wciąż szukał odpowiedzi. – Bobson

+0

Nie zapomnij, że działa na tym samym pliku referencyjnym, tj. Jeśli edytujesz wynikowy XElement, zmiany są również odzwierciedlane w dokumencie XDocument. To może, ale nie musi być pożądane. – nawfal

6

Prosta konwersja z XDocument do Xelement

XElement cvtXDocumentToXElement(XDocument xDoc) 
{ 
    XElement xmlOut = XElement.Parse(xDoc.ToString()); 
    return xmlOut; 
} 
+0

Nie można tego zapomnieć, tworzy całkowicie nową instancję XElement, tj. Zmiany wprowadzone w XElement nie będą odzwierciedlane na XDocument. To może, ale nie musi być pożądane. – nawfal