我试图让一个特定节点的值等于我的输入参数,我的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是否正确加载。
答案 0 :(得分:4)
你的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);
答案 1 :(得分:0)
您是否考虑过使用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);