XPath可以比较十六进制属性值吗?

时间:2014-05-29 18:31:23

标签: .net xml xpath

简单的任务。这是XPath表达式:

/methods/method[@token = '06000009']/sequencePoints/entry[string(@ilOffset) <= string('00000e')][last()]

这是要查询的XML文档的一部分:

<methods>
  <method token="06000009">
    <sequencePoints>
      <entry ilOffset="000000" startLine="178" startColumn="3" />
      <entry ilOffset="000001" startLine="179" startColumn="4" />
      <entry ilOffset="000008" startLine="180" startColumn="4" />
      <entry ilOffset="000009" startLine="181" startColumn="5" />
      <entry ilOffset="00000f" startLine="182" startColumn="4" />
      <entry ilOffset="000010" hidden="true" />
      <entry ilOffset="000022" hidden="true" />
      <entry ilOffset="000023" startLine="183" startColumn="3" />
    </sequencePoints>
  </method>
</methods>

一无所获。但它应该找到这个元素:

<entry ilOffset="000009" ...>

为什么不起作用?

我不确定是否需要进行string()转换。但没有它它也不起作用。我只是不希望XPath比较数字,因为十六进制值可能会出错。

1 个答案:

答案 0 :(得分:1)

XPath 2.0:

是。在您的方案中,您正在比较两个字符串。这是合法的,应该可以正常工作。如果它不起作用,那么你最有可能使用xpath 1.0。

XPath 1.0:

不是真的。它只能将字符串与=!=运算符进行比较。