2010-06-19 3 views

Répondre

24

Les autres réponses fonctionneront si l'élément ne contient que d'autres éléments. Si vous voulez inclure du texte aussi bien, vous voulez utiliser des nœuds() au lieu des éléments():

var result = string.Concat(element.Nodes()); 
+0

Je viens de tester celui-ci, ça a fonctionné parfaitement. C'était ma première question sur Stack Overflow, je suis certainement impressionné par la rapidité avec laquelle j'ai obtenu une réponse. :) – Michael

+0

Fonctionne comme un charme !!! –

3

La classe XElement ne fournit pas de méthode pour obtenir directement le "XML interne" de l'élément.
Vous pouvez concaténer les éléments enfants manuellement si, par exemple en utilisant

string result = string.Concat(element.Elements()); 

ou

string result = string.Join(Environment.NewLine, element.Elements()); 
0

foreach (var element dans Element.Elements()) { yield return element.ToString(); }

Renvoie un IEnumerable avec des chaînes.

1

Voir une variété d'options, avec des tests de performance ici: Best way to get InnerXml of an XElement?

Vous voudrez peut-être pour créer une méthode d'extension pour votre carquois en tant que tel:

/// <summary> 
/// Gets the inner XML of an <see cref="XElement"/>. Copied from 
/// https://stackoverflow.com/questions/3793/best-way-to-get-innerxml-of-an-xelement 
/// </summary> 
/// <param name="element">The element.</param> 
/// <returns>The inner XML</returns> 
public static string GetInnerXml(this XElement element) 
{ 
    var reader = element.CreateReader(); 
    reader.MoveToContent(); 
    return reader.ReadInnerXml(); 
} 
0

pour moi, cela fonctionne comme ça, grâce à Quartermeister

string result = string.Concat(instanceXElement.Nodes().ToArray()); 

Je n'avais que du code HTML dans mon instanceXElement que je voulais extraire exactement.