web-dev-qa-db-fra.com

Comment obtenir le nœud racine XML avec C #?

Je sais qu'il est possible d'obtenir n'importe quel nœud XML à l'aide de C # si vous connaissez le nom du nœud, mais je souhaite obtenir le nœud racine afin de pouvoir connaître le nom. Est-ce possible?

Update : J'utilise XMLTextReader pour lire l'URL d'un fichier, puis je le charge dans un objet XMLDocument. En gros, j'essaie d'éviter LINQ to XML, mais s'il y a une autre solution, je suis toujours un bon élève.

45
Piers Karsenbarg

Le nœud racine est la propriété DocumentElement de XmlDocument

XmlElement root = xmlDoc.DocumentElement

Si vous avez seulement le noeud, vous pouvez obtenir le noeud racine en 

XmlElement root = xmlNode.OwnerDocument.DocumentElement
76
CharlesB

J'ai la même question ici. Si le document est volumineux, utiliser XmlDocument n'est pas une bonne idée. Le fait est que le premier élément est l'élément racine, sur lequel XmlReader peut être utilisé pour obtenir l'élément racine. L'utilisation de XmlReader sera beaucoup plus efficace que l'utilisation de XmlDocument car elle ne nécessite pas de charger le document entier en mémoire.

  using (XmlReader reader = XmlReader.Create(<your_xml_file>)) {
    while (reader.Read()) {
      // first element is the root element
      if (reader.NodeType == XmlNodeType.Element) {
        System.Console.WriteLine(reader.Name);
        break;
      }
    }
  }
20
Mingjiang Shi

En accord avec Jewes, XmlReader est la meilleure solution, en particulier si vous travaillez avec un document XML plus volumineux ou si vous en traitez plusieurs dans une boucle - nul besoin d'analyser l'intégralité du document si vous n'avez besoin que de la racine du document.

Voici une version simplifiée, utilisant XmlReader et MoveToContent ().

http://msdn.Microsoft.com/en-us/library/system.xml.xmlreader.movetocontent.aspx

using (XmlReader xmlReader = XmlReader.Create(p_fileName))
{
  if (xmlReader.MoveToContent() == XmlNodeType.Element)
    rootNodeName = xmlReader.Name;
}
13
Dan Dar3
string rootNode = null;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(response.GetResponseStream());
rootNode = XmlDoc.ChildNodes(0).Name;
0
nesomis

Essaye ça

XElement root = XDocument.Load(fStream).Root;
0
Alberto Rubini