2016-12-02 2 views
0

내 XML 데이터 소스는 노드 :선택 노드

<impact_categories> 
    <impact_category> 
     <name>Cat1</name> 
     <impact_levels> 
      <impact_level> 
       <name>Insignificant</name> 
      </impact_level> 
     </impact_levels> 
    </impact_category> 
    <impact_category> 
     <name>Cat2</name> 
     <impact_levels> 
      <impact_level> 
       <name>Lowest</name> 
      </impact_level> 
     </impact_levels> 
    </impact_category> 
    <impact_category> 
     <name>Cat3</name> 
     <impact_levels> 
      <impact_level> 
       <name>Insignificant</name> 
      </impact_level> 
     </impact_levels> 
    </impact_category> 
</impact_categories> 

내가 impact_level 아이들의 동일한 세트가 모든 impact_category 노드를 선택해야합니다. 이 예제에서 Cat1과 Cat3은 자식 값이 모두 "중요하지 않음"이므로 선택하고 싶습니다. 이러한 노드로 몇 가지 작업을 수행 한 후에는 다른 impact_level 하위 집합 (이 예제에서는 값이 "최저"인 Cat2)을 갖는 impact_category 노드의 다음 배치를 선택해야합니다.

내 문제는 런타임까지 값이 무엇인지 알지 못할 것이며 다른 사용자가 다를 수 있다는 것입니다. 나는 상대적으로 XPath 초보자이므로 어떻게하는지 모릅니다. 나는 온라인과 책에서 몇 시간을 보냈지 만, 내가 발견 한 모든 예는 당신이 알려진 가치에 매치하고 있다고 가정한다. 정말 간단하다면 죄송 합니다만, 정말 붙어 있습니다.

+0

초보자를위한 "하드 너트"(우리가 독일어로 말했듯이). Look Up [muenchian grouping] (http://stackoverflow.com/search?q=muenchian+grouping) –

+0

그러나 영향 수준의 가능한 값을 모르는 경우 추가 처리를 위해 특정 영향 카테고리를 어떻게 선택 하시겠습니까? 선행? – Markus

답변

0

당신은 예를 들어

let $cat := /impact_categories/impact_category 
return $cat[some $cat2 in ($cat except .) satisfies deep-equal(impact_levels, $cat2/impact_levels)] 

다른 impact_categoryimpact_levelsimpact_levels 깊은 동일한 자녀와 함께 impact_category 요소를 반환하도록 선택할 수 있도록 하위 트리를 비교할 수있는 deep-equal 기능이있다.

<xsl:for-each-group select="/impact_categories/impact_category" group-by="impact_levels/impact_level/name">을 그룹화 할 수도 있습니다. 이러한 하위 항목이 하나만있는 경우 하나의 요소 만 쉽게 그룹화 할 수 있습니다. 지문을 계산하거나 XSLT 3.0 및 복합을 사용하려는 경우가 있습니다. 열쇠.