Подтвердить что ты не робот

Чтение значений из 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? Любая помощь очень ценится!

4b9b3361

Ответ 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

должно сработать