【问题标题】:Why does this XPath filter not work (maximum number)?为什么这个 XPath 过滤器不起作用(最大数量)?
【发布时间】:2016-10-26 15:35:13
【问题描述】:
<test>
   <child id="13680621263370126043"/>
   <child id="13680621263370124329"/>
</test>

代码:

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

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

【问题讨论】:

  • 因为 xml 区分大小写。 Idid 不同。

标签: c# xml xpath


【解决方案1】:

改变

 /test/child[@Id=13680621263370126043]

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

因为

  1. XML 区分大小写。
  2. 正在测试的值太长,无法作为数字进行测试。

XPath 中最大数量的注意事项

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

【讨论】:

  • 啊,我们走了,胖手指在我的例子中,但第二个问题是它,谢谢!最后在文档中找到了这一点:所有元素和属性都是字符串,但会自动转换为整数值以进行数字比较。在比较操作过程中,文字数值被转换为 long 或 double 类型,如下表所示。
  • 很高兴解释为什么它不能作为数字工作
【解决方案2】:

你有两个问题:

  1. 区分大小写。应该是 id 而不是 Id
  2. ''包装值

所以:

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

// result contains 1 item

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 2021-10-15
    • 2015-06-10
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多