我正在使用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>600 and @oldValue<10]
如果我将oldValue
取出并使用()
这样比较有效:
/data/event[(@deviceId="25479545.5" and @interface="sensor-multilevel") and
(@label="luminance" and @newValue>600)]
比较次数是否有限制?
将600转换为小数有什么特别之处吗?
我需要“”值600,它似乎无论如何都有效。
有关如何使用表达式中包含的oldValue属性的任何想法吗?
TinyXPath致电:
TiXmlNode * node = TinyXPath::XNp_xpath_node( root, expression.c_str() );
由于 拉里
答案 0 :(得分:0)
您似乎在这里进行字符串比较而不是数字比较(&#34; 9&#34;&gt;&#34; 10&#34;按字母顺序排列)。根据规范(XPath 1.0和2.0,虽然它们以相当不同的方式实现),这是不正确的。
最安全的方法可能是明确转换为数字:write
number(@oldValue) < 10
答案 1 :(得分:0)
看起来tinyxpath库有一些bug ....
这适用于tinyxpath-1.3.1:
/data/event[((@deviceId="25479545.5" and @interface="sensor-multilevel") and
(@label="luminance" and @newValue>"600")) and (@oldValue<"10")]
需要使用括号将这些括号分组为最终的2个。
或者我只是转换为使用libxml2。