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.
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
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;
}
}
}
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;
}
string rootNode = null;
XmlDocument XmlDoc = new XmlDocument();
XmlDoc.Load(response.GetResponseStream());
rootNode = XmlDoc.ChildNodes(0).Name;
Essaye ça
XElement root = XDocument.Load(fStream).Root;