2010-03-01 2 views
2

다른 하나 (B)를 가져 오는 XSL 스타일 시트 (A)가 있습니다. A는 B의 템플릿 (t)를 무시하고, 적용-수입과 B의 템플릿을 호출 : A로부터xsl : apply-imports 결과에 속성 추가

: B에서

<xsl:template match="t"> 
    <xsl:apply-imports/> 
</xsl:template> 

:

<xsl:template match="t"> 
    <p><!-- Do something --></p> 
</xsl:template> 

내가 지금 A가를 추가 할 속성 (<p> ... </p>)은 apply-imports에 의해 반환됩니다. 속성은 요소 p에 직접 추가되어야하며, p는 다른 요소에 래핑되지 않아야합니다. 어떻게해야합니까?

감사합니다, 요헨

답변

1

IMHO, 당신은 할 수 없습니다. 그 일치하는 템플릿은 다음 <p> 이미 결과 트리에 건설하고

0

그것은 결국 단지 XML의 B에 몇 가지 사전 처리를하는 것에 대해 생각 A.에 액세스 할 수 없게되어 실행이 완료 될 때

B는 독립적이다.

0

B 템플릿에 매개 변수를 추가하고 A 일치에 포함시킬 수 있습니까? 그렇게하면 A 일치로 제어되는 기반 특성을 추가 할 수 있습니다.

+0

이 경우에 나는 단지를 변경하지 B. 수있는 것은 아닙니다 때문에 – Jochen

0

XSLT1에서 변수를 사용하여 원본 템플릿 출력을 캡처 한 다음 원하는 결과를 얻을 수 있습니다. 불행히도 외부 기능을 result tree fragment에서 노드 집합으로 변환해야합니다.

(xsltproc 테스트)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns:exsl="http://exslt.org/common" exclude-result-prefixes="exsl" 
       ... 
       version='1.0'> 

<xsl:import href="B.xsl" /> 

<xsl:template match="t"> 
    <!-- capture inherited template result --> 
    <xsl:variable name="baseresult"> 
    <xsl:apply-imports/> 
    </xsl:variable> 
    <!-- apply custom transformation each node of the result --> 
    <xsl:for-each select="exsl:node-set($baseresult)/node()"> 
    <xsl:copy> 
     <xsl:copy-of select="@*"/> 
     <xsl:attribute name="class">overrided</xsl:attribute> 
     <xsl:copy-of select="node()"/> 
    </xsl:copy> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet>