1

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

4

2 回答 2

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);
于 2013-05-08T21:45:56.453 回答
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);
于 2013-05-08T22:45:51.383 回答