简单的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无法查找节点

您的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);