在tinyxpath中给出错误匹配和不匹配的属性比较
Attribute Comparison giving false matches and non matches in tinyxpath
我使用的是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() );
谢谢Larry
您在这里得到的似乎是字符串比较,而不是数字比较(按字母顺序为"9">"10")。根据规范,这是不正确的(XPath1.0和2.0,尽管它们的实现方式截然不同)。
最安全的方法可能是显式地转换为数字:写入
number(@oldValue) < 10
看起来tinyypath库有一些错误。。。。
这适用于tinyxpath-1.3.1:
/data/event[((@deviceId="25479545.5" and @interface="sensor-multilevel") and
(@label="luminance" and @newValue>"600")) and (@oldValue<"10")]
需要插入括号才能将它们组合成最后一组2个。
或者我只是转换为使用libxml2。
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- 顶点属性大小不匹配时会发生什么情况
- 在tinyxpath中给出错误匹配和不匹配的属性比较