从XNode中读取值

时间:2011-11-10 09:41:44

标签: c# xml linq

我有一些代码将XNode返回给我,如下所示:

<File>
  <Component>Main</Component>
  <Path>C:\Main\</Path>
  <FileName>main.txt</FileName>
</File>

我需要一些能够提取Path值的C#代码(C:\ Main)。我知道,如果我使用XML节点,我可以这样做:

String filePath = xmlNode["Path"].InnerText;

有人知道XNode的等价物是什么吗?非常感谢任何帮助!

7 个答案:

答案 0 :(得分:45)

返回XNode而不是XElement?使用XElement比使用XNode

更简单
string filePath = fileElement.Element("Path").Value;

这将找到第一个 Path元素,如果没有,则会抛出NullReferenceException。如果你很高兴得到null,如果没有,那么可以选择:

string filePath = (string) fileElement.Element("Path");

如果您真的被XNode困住,则必须投放到XElementXContainer

答案 1 :(得分:7)

您可以将XNode转换为XElement以访问其属性,例如:

XNode lastNode = myXElement.LastNode;

//if I want to get the 'ID' attribute
string id = (lastNode as XElement).Attribute("ID").Value;

答案 2 :(得分:0)

你可以用这个:

XElement xtr = XElement.Load("path/to/your/xml/file");
String filePath = xtr.Descendants("Path").Single().Value;

答案 3 :(得分:0)

如果导入System.Xml.XPath,可以在XNode对象上使用XPathSelectElement:

String component = xmlNode.XPathSelectElement("Component");
String path = xmlNode.XPathSelectElement("Path");
String fileName = xmlNode.XPathSelectElement("FileName");

答案 4 :(得分:0)

将XNode转换为XElement适用于单个元素以检索其值或属性。但是你无法使用myXelement.Elements(&#34; XXX&#34;)来获取嵌套元素。为此,您可以使用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;

答案 5 :(得分:0)

这取决于抽象的XNode是什么具体的对象。来自XNode Class

  

XNode是以下类型的抽象公共基类:   XComment   XContainer:可以是XDocument或XElement   XDocumentType   XProcessing指令   XText

因此,您需要检查是否可以将其强制转换为XDocumentXElement,并使用其方法,或使用LINQ to XML:

例如:

答案 6 :(得分:0)

XNode xnode 
string value = (xnode  as XElement).Value;

我们可以从XElement对象获取值,所以我们需要先将XNode强制转换为XElement

应该工作