J'ai un ancien code basé sur XmlNode
. mais la façon la plus simple de résoudre ma tâche actuelle est d'utiliser XElement
et LINQ-to-XML. Le seul problème est qu'il n'y a pas de méthode directe ou évidente pour convertir un XmlNode
en XElement
dans .NET Framework.
Donc pour commencer, je veux implémenter une méthode qui reçoit une instance XmlNode
et la convertit en une instance XElement
.
Comment puis-je implémenter cette conversion?
var xElem = XElement.Load( xmlElement.CreateNavigator().ReadSubtree() );
Il y a deux problèmes avec xmlElement.InnerXml utilisé dans une autre réponse,
1 - Vous perdrez l'élément racine (Bien sûr, il peut être manipulé facilement)
XmlDocument doc = new XmlDocument();
doc.LoadXml("<root> <sub>aaa</sub> </root>");
var xElem1 = XElement.Load(doc.DocumentElement.CreateNavigator().ReadSubtree());
var xElem2 = XElement.Parse(doc.DocumentElement.InnerXml);
xElem2
sera <sub>aaa</sub>
, sans (root
)
2 - Vous obtiendrez une exception si votre xml contient des nœuds de texte
XmlDocument doc = new XmlDocument();
doc.LoadXml("<root> text <sub>aaa</sub> </root>");
var xElem1 = XElement.Load(doc.DocumentElement.CreateNavigator().ReadSubtree());
var xElem2 = XElement.Parse(doc.DocumentElement.InnerXml); //<-- XmlException
Vous pouvez essayer d'utiliser InnerXml
propriété de XmlElement
pour obtenir le contenu xml de votre élément, puis l'analyser en XElement
en utilisant XElement.Parse
:
public static XElement ToXELement(this XmlElement source)
{
return XElement.Parse(source.InnerXml);
}