1

とまたはが与えられたxpath_query場合xml_attributexml_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;
}

ただし、それは少しコストがかかるようです。もっと安い方法はありますか?

4

1 に答える 1

0

使用:

 count(expressionSelectingTheNode | theQuery) = count(theQuery)

上記の「expressionSelectingTheNode」と「theQuery」を正しい式に置き換える必要があります。

これは、式で選択された単一のノードが式で選択されたノードの 1 つであるtrue()場合にのみ返されます。expressionSelectingTheNodetheQuery

この 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()です。

于 2012-08-16T03:24:51.073 に答える