如果我得到特定节点的路径作为字符串,我可以通过使用XElement(或XDocument)的Linq / Method以某种方式轻松找到所述节点。
有很多不同类型的XML对象,如果作为一个额外的奖励,你可以指出我为什么/如何使用不同类型的指南。
编辑:好的,在被指向XPathSelectElement后我正在尝试,所以我可以给他正确的答案我不能让它工作但是。这是我正在尝试的XML<Product>
<Name>SomeName</Name>
<Type>SomeType</Type>
<Quantity>Alot</Quantity>
</Product>
和我的代码
string path = "Product/Name";
string name = xml.XPathSelectElement(path).Value;
请注意我的字符串来自其他地方所以我猜它不一定是文字的(至少在调试模式下它看起来像上面那个)。我也试过在前面添加/。它给了我一个空参考。
答案 0 :(得分:11)
尝试使用XPathSelectElement
的{{1}}扩展方法。您可以将方法传递给XPath表达式进行求值。例如:
XElement
修改强>:
在回复您的编辑时,请检查您的XPath表达式。如果您的文档仅包含该小片段,那么XElement myElement = rootElement.XPathSelectElement("//Book[@ISBN='22542']");
将起作用,因为前导斜杠从文档的根目录执行搜索:
/Product/Name
如果有其他产品且XElement element = document.XPathSelectElement("/Product/Name");
不是根节点,则需要修改您正在使用的XPath。
答案 1 :(得分:7)
您也可以使用XPathEvaluate
XDocument document = XDocument.Load("temp.xml");
var found = document.XPathEvaluate("/documents/items/item") as IEnumerable<object>;
foreach (var obj in found)
{
Console.Out.WriteLine(obj);
}
给出以下xml:
<?xml version="1.0" encoding="utf-8" ?>
<documents>
<items>
<item name="Jamie"></item>
<item name="John"></item>
</items>
</documents>
这应该从items节点打印内容。