2012-03-05 9 views
1

내 문제는 다음과 같습니다. 특정 조건을 충족하는 노드에 특정 template을 적용하려고합니다. 나는 모든 A 노드를 선택합니다여러 조건을 충족하는 특정 노드 선택

<Root> 
    <A> 
    <id>1</id> 
    <B> 
     <C> 
     <name>C_name1</name> 
     <D> 
      <E>label1</E> 
      <E>label2</E> 
     </D> 
     </C> 
     <C> 
     <name>C_name2</name> 
     <D> 
      <E>label1</E> 
      <E>label3</E> 
     </D> 
     </C> 
    </B> 
    </A> 
    <A> 
    ... 
    </A> 
</Root> 

해당 노드가 존재하는 경우, 나는 또한 같은이 노드가 D/E = `specific_label'을 충족하려면 같은 A[B/C/name = 'specific_name'] 것을 AND :처럼 내 XML 보인다. 따라서 A[B/C[name = 'specific_name']/D/E = 'specific_label']과 같은 것을 원하지만이 구문은 작동하지 않습니다 ...

올바른 요구 사항을 충족하고 올바른 템플릿에 템플릿을 적용하려면 올바른 구문은 무엇입니까?

도움 주셔서 감사합니다.

답변

3

는 :

A[B/C[name='specific_name' and D/E='specific_label']] 

이 여러 조건을 연결하는 유일한 올바른 방법입니다, 그들 중 일부는 position() 기능을 포함 할 경우 어떤 상황에 따라 다르며 일반적으로 다른 술어에 포함될 때 다른 값을 갖습니다.

+0

아! 나는 ~을 제안하려고했다 :) +1. –

+0

@ infantprogrammer'Aravind ': 천만에. :) –

1

사실 올바른 구문으로 나타납니다

<xsl:template match="Root"> 
    <xsl:apply-templates select="A[B/C[name='specific_name'][D/E='specific_label']]" /> 
</xsl:template> 

는 희망이 도움이! 당신이 볼 수있는 대답은, 하나는 다음 XPath 식을 사용할 수 있습니다 외에 :)

+0

질문에 대한 답변을 찾았다는 의미입니까? 그렇다면 답을 수락 한 것으로 표시하십시오. – Lukasz

+0

나는 같은 해결책을 생각해 냈다. XSLT에서 중첩 된 대괄호가 허용됩니다 .-) – Maestro13

+0

예 답변을 찾았지만 2 일 전에 내 대답을 수락 할 수 없습니다! 나는 당신과 동의한다. Maestro : 나는 처음에 그들에 대해 생각하지 않았다. –

관련 문제