2012-08-15 5 views
1

xml_attribute 또는 xml_node이 주어지면 해당 속성 또는 노드가 쿼리와 일치하는지 여부를 알고 싶습니다.pugixml : xpath가 특정 노드/속성과 일치하는지 알아보십시오.

나는 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

사용 : 올바른 표현과 함께 "expressionSelectingTheNode"와 "theQuery"이상으로 대체해야

count(expressionSelectingTheNode | theQuery) = count(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> 

과 식입니다 (모두 선택하십시오.그 값이 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()입니다.

관련 문제