Чтение значений из XNode
У меня есть код, возвращающий мне XNode, который выглядит так:
<File>
<Component>Main</Component>
<Path>C:\Main\</Path>
<FileName>main.txt</FileName>
</File>
Мне нужно иметь код С#, который сможет вытащить значение Path, например (C:\Main). Я знаю, что если бы я использовал XML node, я мог бы сделать это следующим образом:
String filePath = xmlNode["Path"].InnerText;
Кто-нибудь знает, что эквивалент будет для XNode? Любая помощь очень ценится!
Ответы
Ответ 1
Вам нужно, чтобы он возвращал XNode
, а не XElement
? С XElement
это проще, чем с XNode
:
string filePath = fileElement.Element("Path").Value;
Это найдет первый элемент Path
и выбросит NullReferenceException
, если таковых нет. Альтернатива, если вы счастливы получить null
, если таковых не было:
string filePath = (string) fileElement.Element("Path");
Если вы действительно застряли в XNode
, вам нужно либо нажать на XElement
, либо, возможно, XContainer
.
Ответ 2
Вы можете конвертировать XNode в XElement для доступа к его свойствам, мой пример:
XNode lastNode = myXElement.LastNode;
//if I want to get the 'ID' attribute
string id = (lastNode as XElement).Attribute("ID").Value;
Ответ 3
Вы можете использовать это:
XElement xtr = XElement.Load("path/to/your/xml/file");
String filePath = xtr.Descendants("Path").Single().Value;
Ответ 4
Если вы импортируете System.Xml.XPath, вы можете использовать XPathSelectElement как это на объекте XNode:
String component = xmlNode.XPathSelectElement("Component");
String path = xmlNode.XPathSelectElement("Path");
String fileName = xmlNode.XPathSelectElement("FileName");
Ответ 5
Приведение XNode в XElement позволяет отдельному элементу получить его значение или атрибуты. Но вы не сможете использовать myXelement.Elements( "XXX" ) для получения вложенных элементов. Для этого вы можете использовать xmlNode.Nodes().
Это должно работать:
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;
Ответ 6
Это зависит от того, какие конкретные объекты являются абстрактными XNode
. Из класса XNode:
XNode - это абстрактный общий базовый класс для следующих типов: XComment XContainer: может быть XDocument или XElement XDocumentType XProcessingInstruction XText
Поэтому вам нужно проверить, можете ли вы привести его к XDocument
или XElement
и использовать их методы, или использовать LINQ to XML:
Например:
Ответ 7
XNode xnode
string value = (xnode as XElement).Value;
мы можем получить значение из объекта XElement, поэтому нам нужно сначала преобразовать XNode в XElement
должно сработать