Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ pugixml:找出xpath是否匹配特定的节点/属性_C++_Xpath_Pugixml - Fatal编程技术网

C++ pugixml:找出xpath是否匹配特定的节点/属性

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())) {

给定一个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()))
    {
        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])