简单的xpath无法查找节点
本文关键字:查找 节点 xpath 简单 | 更新日期: 2023-09-27 18:12:38
我想获得一个value等于输入参数的特定节点,我的xpath是这样的其中b是我需要的节点
string xpath = "/Batches/Measurement/Batch[market=someval]/b";
<?xml version="1.0" encoding="utf-8" ?>
<Batches>
<Measurement>
<Batch>
<market>someval</market>
<b>someval</b>
</Batch>
</Measurement>
</Batches>
var xmlNode = xmlDoc.SelectNodes(xpath);
没有节点返回总是计数为0,我检查了xmldoc是否正确加载。
您的xpath几乎是完美的。只需要记住const值必须放在撇号中:
"/Batches/Measurement/Batch[market='someval']/b"
更新:c#代码示例:
XmlNodeList nodeList;
nodeList = root.SelectNodes("/Batches/Measurement/Batch[market='someval']/b");
foreach (XmlNode node in nodeList)
{
for (int i = 0; i < node.ChildNodes.Count; i++)
{
Console.WriteLine(node.ChildNodes[i].InnerText);
}
}
SelectNodes的返回值是一个nodeList。你必须遍历它
再短一点:
XmlElement root = doc.DocumentElement;
string text;
text = root.SelectSingleNode("/Batches/Measurement/Batch[market='someval']/b").InnerText;
Console.WriteLine(text);
您是否考虑过使用LINQ to XML?
对于选择来说,它是更有效和更简洁的语法。我知道您询问了Xpath,所以可以忽略这个问题。只是让你知道
选项var doc = XDocument.Load("c:''tmp''test.xml");
var result = doc.Descendants().Where(x => x.Element("b") != null)
.Select(x => x.Element("b").Value);