从XNode中读取值

29

我有一些代码,它返回给我一个看起来像这样的XNode:

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

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

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

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

7个回答

47

你是否必须返回一个XNode而不是一个XElement?使用XElement比使用XNode更简单:

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

这将找到第一个Path元素,如果没有,则会抛出NullReferenceException异常。如果您希望在没有元素的情况下得到null,则可以使用以下替代方法:

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

如果您真的被困在 XNode 中,那么您需要将其强制转换为 XElement 或可能的话使用 XContainer


当我尝试将对象转换为XElement时,出现了异常。你有解决办法吗?先谢谢了。 - alperc
没有更多的上下文信息,无法回答你的问题。建议您提出一个新问题并附带一个示例。 - Jon Skeet
XElement xelm = (XElement) XNodeObject; 返回异常。 - alperc
1
@ot0:这不是一个带有示例的新问题,而只是一个单一陈述的评论,没有足够的上下文来了解正在发生什么。 - Jon Skeet
我会在几分钟内发布一个更具体的问题。 - alperc
显示剩余2条评论

11

您可以将XNode转换为XElement以访问其属性,以下是我的示例:

XNode lastNode = myXElement.LastNode;

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

向下转型不好吗? - batbaatar
啊,谢谢。我现在明白XElement完全可以胜任了。 - AndrewRalon
1
以示例XML作为XNode,他更关心节点下的元素而不是属性吗?所以更像是字符串路径=(lastNode as XElement).Element("Path").Value; - Morgeth888

1
将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;

0
如果您导入System.Xml.XPath,您可以在XNode对象上使用XPathSelectElement,如下所示:
String component = xmlNode.XPathSelectElement("Component");
String path = xmlNode.XPathSelectElement("Path");
String fileName = xmlNode.XPathSelectElement("FileName");

0

0

你可以使用这个:

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

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

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

应该可以工作


1
虽然这可能解决问题,但最好也包括一些解释。 - Rastalamm
1
这是一个7年以上的问题,有一个被接受的答案,而这个提供的答案被标记为低质量帖子进行审核。以下是一些如何撰写好的答案?的指南。这个提供的答案可能是正确的,但它可以从解释中受益。仅有代码的答案不被认为是“好”的答案。来自审核 - Trenton McKinney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接