如何在Linq-to-XML中按路径查找XML节点

如果我获得特定节点的路径作为字符串,我可以通过使用XElement(或XDocument)的Linq / Method以某种方式轻松找到所述节点。

有很多不同类型的XML对象,如果作为一个额外的奖励,你可以指出我为什么/如何使用不同类型的指南。

编辑:确定在指向XPathSelectElement后我正在尝试它,所以我可以给他正确的答案我不能让它工作但是。 这是我正在尝试的XML

 SomeName SomeType Alot  

和我的代码

 string path = "Product/Name"; string name = xml.XPathSelectElement(path).Value; 

请注意我的字符串来自其他地方所以我猜它不一定是文字(至少在调试模式下它看起来像上面的那个)。 我也尝试过添加/在前面。 它给了我一个空参考。

尝试使用XElementXPathSelectElement扩展方法。 您可以将方法传递给XPath表达式进行求值。 例如:

 XElement myElement = rootElement.XPathSelectElement("//Book[@ISBN='22542']"); 

编辑

在回复您的编辑时,请检查您的XPath表达式。 如果您的文档仅包含该小片段,则/Product/Name将起作用,因为前导斜杠从文档的根目录执行搜索:

 XElement element = document.XPathSelectElement("/Product/Name"); 

如果有其他产品且不是根节点,则需要修改您正在使用的XPath。

您还可以使用XPathEvaluate

 XDocument document = XDocument.Load("temp.xml"); var found = document.XPathEvaluate("/documents/items/item") as IEnumerable; foreach (var obj in found) { Console.Out.WriteLine(obj); } 

给出以下xml:

        

这应该打印items节点中的内容。