J'ai un code qui me renvoie un XNode qui ressemble à ceci:
<File>
<Component>Main</Component>
<Path>C:\Main\</Path>
<FileName>main.txt</FileName>
</File>
J'ai besoin d'un code C # qui puisse extraire la valeur de Path par exemple (C:\Main). Je sais que si j'utilisais un nœud XML, je pourrais le faire comme ceci:
String filePath = xmlNode["Path"].InnerText;
Est-ce que quelqu'un sait ce que l'équivalent serait pour un XNode? Toute aide est très appréciée!
Est-ce que vous {avez} _ voulez qu'il retourne une XNode
plutôt qu'une XElement
? Avec un XElement
c'est plus simple qu'avec un XNode
:
string filePath = fileElement.Element("Path").Value;
Cela trouvera l'élément premierPath
et jettera un NullReferenceException
s'il n'en existe pas. Une alternative si vous êtes heureux d'obtenir null
s'il n'y en a pas serait:
string filePath = (string) fileElement.Element("Path");
Si vous êtes vraiment coincé avec XNode
, vous devrez soit transtyper en XElement
ou éventuellement XContainer
.
Vous pouvez convertir votre XNode en XElement pour accéder à ses propriétés, mon exemple:
XNode lastNode = myXElement.LastNode;
//if I want to get the 'ID' attribute
string id = (lastNode as XElement).Attribute("ID").Value;
Vous pouvez utiliser ceci:
XElement xtr = XElement.Load("path/to/your/xml/file");
String filePath = xtr.Descendants("Path").Single().Value;
Si vous importez System.Xml.XPath, vous pouvez utiliser XPathSelectElement comme ceci sur l'objet XNode:
String component = xmlNode.XPathSelectElement("Component");
String path = xmlNode.XPathSelectElement("Path");
String fileName = xmlNode.XPathSelectElement("FileName");
La conversion de XNode en XElement permet à l'élément individuel de récupérer sa valeur ou ses attributs. Mais vous ne pourrez pas utiliser myXelement.Elements ("XXX") pour obtenir des éléments imbriqués. Pour cela, vous pouvez utiliser xmlNode.Nodes ().
Cela devrait fonctionner:
var nodes = xmlNode.Nodes();//Get all nodes under 'File'
var fileNameNode = nodes.Where(el => ((XElement)el).Name.LocalName == "FileName")
.FirstOrDefault();
string filePath = ((XElement)fileNameNode).Value;
Cela dépend de ce que les objets classiques sont le résumé XNode
. De Classe XNode :
XNode est une classe de base commune abstraite pour les types suivants: XComment XContainer: peut être XDocument ou XElement XDocumentType XProcessingInstruction XText
Vous devez donc vérifier si vous pouvez le convertir en XDocument
ou XElement
et utiliser leurs méthodes, ou utiliser LINQ to XML:
Par exemple: