C++ pugixml:找出xpath是否匹配特定的节点/属性
给定一个xpath_查询和一个xml_属性或xml_节点,我想知道查询是否会匹配该属性或节点 我可以将查询求值为xpath_node_集,然后检查该节点是否在内部,如下所示:C++ pugixml:找出xpath是否匹配特定的节点/属性,c++,xpath,pugixml,C++,Xpath,Pugixml,给定一个xpath_查询和一个xml_属性或xml_节点,我想知道查询是否会匹配该属性或节点 我可以将查询求值为xpath_node_集,然后检查该节点是否在内部,如下所示: bool match(const pugi::xpath_query& query, const pugi::xml_node& node) { for (const auto& child : query.evaluate_node_set(node.parent())) {
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;
}
然而,这似乎有点昂贵。有更便宜的方法吗?使用:
需要用正确的表达式替换上述表达式SelectingTheNode和查询
当且仅当由表达式expressionSelectingTheNode选择的单个节点是由表达式theQuery选择的节点之一时,此项返回true
例如:
如果我们有此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>
表达式为选择值为2的倍数和3的倍数的所有num元素:
/*/num[. mod 2 = 0 and . mod 3 = 0]
然后我们计算这个表达式:
结果是正确的
如果我们计算此表达式,希望查看是否也选择了05:
count(/*/num[. = 5] | /*/num[. mod 2 = 0 and . mod 3 = 0])
=
count(//*/num[. mod 2 = 0 and . mod 3 = 0])
现在的结果是错误的
/*/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])
count(/*/num[. = 5] | /*/num[. mod 2 = 0 and . mod 3 = 0])
=
count(//*/num[. mod 2 = 0 and . mod 3 = 0])