为什么这个XPath过滤器不起作用(最大数量)?

时间:2016-10-26 15:35:14

标签: c# xml xpath

<test>
   <child id="13680621263370126043"/>
   <child id="13680621263370124329"/>
</test>

代码:

doc.SelectNodes(@"/test/child[@Id=13680621263370126043]");

返回的列表中有两个子节点,是什么给出的?

2 个答案:

答案 0 :(得分:2)

更改

 /test/child[@Id=13680621263370126043]

 /test/child[@id='13680621263370126043']

,因为

  1. XML区分大小写。
  2. 测试的值太长,无法作为数字进行测试。
  3. 注意XPath中的最大数量

    XPath uses double-precision 64-bit format IEEE 754 value代表数字15-17 signicant decimal digits。此处的@id属性有20位数字,因此必须作为字符串进行测试,而不是数字。

答案 1 :(得分:2)

你有两个问题:

  1. 区分大小写。它应该是id而不是Id
  2. 使用''
  3. 换算值

    所以:

    var doc = new XmlDocument();
    doc.Load("data.xml");
    var result = doc.SelectNodes(@"//test/child[@id='13680621263370126043']");
    
    // result contains 1 item