简单的xpath无法找到节点

时间:2013-05-08 21:33:56

标签: c# xml xpath

我试图让一个特定节点的值等于我的输入参数,我的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是否正确加载。

2 个答案:

答案 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);
相关问题