일단 XSLT 탐색이 어떻게 작동하는지 잘 이해하면 (나는 다른 질문에서 대답 했음) 이것이 매우 간단해질 것이라고 생각합니다.
몇 가지 방법이 있습니다. Darrell Miller의 답변에 따르면 전체 문서를 처리하고 관심이없는 요소를 제거해야합니다. 이는 하나의 접근 방법입니다.
앞서 자세히 설명하기 전에 XSLT에서 컨텍스트 개념을 완전히 '알지 못한다'는 인상을 받았습니다. 이것은 중요하며 인생을 더 단순하게 만듭니다. XSLT에서 언제든지 유일한 컨텍스트 노드가 있습니다. 이것은 현재 '처리 중'인 노드 (요소, 속성, 주석 등)입니다. via xsl : template을 선택하면 컨텍스트 노드가 선택됩니다.
<alpha_top>This prints.
<beta>This doesn't.
<alpha_bottom>This too prints.</alpha_bottom>
</beta>
</alpha_top>
다음과 같은 :
<xsl:apply-templates select='beta'/>
및
<xsl:template match='beta'>...</xsl:template>
베타 노드는 템플릿 내부의 상황에 맞는 노드가 될 따라서, 귀하의 XML을 제공. 그보다는 조금 더 많은 것이 있지만 많지는 않습니다.
그래서, 당신은 같은 것을 사용하여 스타일 시트를 시작할 때 :
<xsl:template match='/'>
<xsl:apply-templates select='alpha_top'/>
</xsl:apply-templates>
이 문서 노드의 아이를 선택하는 (유일한 자식 요소는 alpha_top 요소입니다). 내부의 xpath 문은 컨텍스트 노드에 상대적입니다.
이제 최상위 템플릿에서 alpha_bottom 노드 만 처리하기로 결정할 수 있습니다. 그러면 다음과 같은 문구를 넣을 수 있습니다 :
<xsl:template match='/>
<xsl:apply-templates select='//alpha_top'/>
</xsl:template>
이것은 나무를 걸어 다니며 모든 alpha_top 요소를 선택합니다.
또는 당신은 모든 요소를 처리 할 수 있으며, 단순히 베타 노드의 내용을 무시 : 나는 당신 XSL 내 다른 답변에서 언급 한 바와 같이 (
<xsl:template match='beta'>
<xsl:apply-templates/>
</xsl:template>
을 : 적용 템플릿에는 선택 속성이 동일하지와 함께 select = ''*)을 사용합니다.
이
베타 노드의 내용을 무시하지만 모두가 (당신이 템플릿이 가정) 아동 처리합니다.
그래서, 당신의 출력 요소를 무시하는 것은 기본적으로 당신의 선택 속성에 올바른 XPath는 문을 사용하는 문제이다. 물론, 당신이 좋은 XPath는 자습서를 :) 할 수 있습니다
고마워요, 저는 이것을 아침에 보겠습니다. XSLT 리소스에 대한 내 질문을 보시겠습니까? 지금 나는 무겁게 마실거야. – chernevik