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

时间:2014-10-06 22:06:47

标签: c++ c

我正在使用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() );

由于 拉里

2 个答案:

答案 0 :(得分:0)

您似乎在这里进行字符串比较而不是数字比较(&#34; 9&#34;&gt;&#34; 10&#34;按字母顺序排列)。根据规范(XPath 1.0和2.0,虽然它们以相当不同的方式实现),这是不正确的。

最安全的方法可能是明确转换为数字:write

number(@oldValue) &lt; 10

答案 1 :(得分:0)

看起来tinyxpath库有一些bug ....

这适用于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。