鉴于xpath_query
和xml_attribute
或xml_node
,我想知道该属性或节点是否与查询匹配。
我可以将查询评估为xpath_node_set
,然后检查节点是否在内部,如下所示:
bool match(const pugi::xpath_query& query, const pugi::xml_node& node)
{
for (const auto& child : query.evaluate_node_set(node.parent()))
{
if (child.node() == node)
return true;
}
return false;
}
然而,这看起来有点贵。有更便宜的方式吗?
答案 0 :(得分:0)
使用强>:
count(expressionSelectingTheNode | theQuery) = count(theQuery)
你需要用正确的表达式替换“expressionSelectingTheNode”和“theQuery”。
当且仅当表达式true()
选择的单个节点是表达式expressionSelectingTheNode
选择的节点之一时,才会返回theQuery
。
示例强>:
如果我们有这个XML文档:
<nums>
<num>01</num>
<num>02</num>
<num>03</num>
<num>04</num>
<num>05</num>
<num>06</num>
<num>07</num>
<num>08</num>
<num>09</num>
<num>10</num>
</nums>
节点(由/*/num[. = 6]
选择):
<num>06</num>
,表达式为(选择所有num
个元素,其值为2的倍数和3的倍数:
/*/num[. mod 2 = 0 and . mod 3 = 0]
然后我们评估此表达式:
count(/*/num[. = 6] | /*/num[. mod 2 = 0 and . mod 3 = 0])
=
count(//*/num[. mod 2 = 0 and . mod 3 = 0])
,结果为true()
。
如果我们评估此表达式(想要查看是否还选择了<num>05</num>
):
count(/*/num[. = 5] | /*/num[. mod 2 = 0 and . mod 3 = 0])
=
count(//*/num[. mod 2 = 0 and . mod 3 = 0])
结果现在为false()
。