50 votes

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?

Mise à jour : J'utilise XMLTextReader pour lire l'URL d'un fichier, puis 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.

83voto

CharlesB Points 27070

Le noeud racine est le DocumentElement propriété de XmlDocument

 XmlElement root = xmlDoc.DocumentElement
 

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

 XmlElement root = xmlNode.OwnerDocument.DocumentElement
 

26voto

Mingjiang Shi Points 550

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

17voto

Dan Dar3 Points 435

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

0voto

Alberto Rubini Points 440

Essaye ça

 XElement root = XDocument.Load(fStream).Root;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X