在tinyxpath中给出错误匹配和不匹配的属性比较

Attribute Comparison giving false matches and non matches in tinyxpath

本文关键字:不匹配 属性 比较 tinyxpath 出错 错误      更新时间:2023-10-16

我使用的是tinyxpath-1.3.1。Linux上的C/C++。当我对文档进行xpath搜索时,我没有在我认为应该的时候找到节点。

我的XML:

<data>
  <event deviceId="25479545.5" interface="sensor-multilevel" 
         command="state" label="luminance" newValue="800" 
         oldValue="9" time="1412227484" />
</data>

我的xpath表达式:

/data/event[@deviceId="25479545.5" and @interface="sensor-multilevel" and   
            @label="luminance" and @newValue&gt;600 and @oldValue&lt;10]

如果我取出oldValue并像这样使用(),则比较有效:

/data/event[(@deviceId="25479545.5" and @interface="sensor-multilevel") and
            (@label="luminance" and @newValue&gt;600)]

比较的次数有限制吗?

把600转换成十进制有什么特别之处吗?

我需要"值600吗,它似乎可以用任何一种方式。

关于如何使用表达式中包含的oldValue属性,有什么想法吗?

TinyXPath调用:

TiXmlNode * node = TinyXPath::XNp_xpath_node( root, expression.c_str() );

谢谢Larry

您在这里得到的似乎是字符串比较,而不是数字比较(按字母顺序为"9">"10")。根据规范,这是不正确的(XPath1.0和2.0,尽管它们的实现方式截然不同)。

最安全的方法可能是显式地转换为数字:写入

number(@oldValue) &lt; 10

看起来tinyypath库有一些错误。。。。

这适用于tinyxpath-1.3.1:

    /data/event[((@deviceId="25479545.5" and @interface="sensor-multilevel") and
          (@label="luminance" and @newValue&gt;"600")) and (@oldValue&lt;"10")]

需要插入括号才能将它们组合成最后一组2个。

或者我只是转换为使用libxml2。