2014-04-09 2 views
1

내 템플릿 내에서 다른 xsl 파일의 xsl 템플릿에 액세스하려고합니다. 2 개의 템플릿은 다른 XSL 파일에 있으며 문서 기능이 필요한 이유입니다. 템플릿은 다른 XML 파일에도 적용됩니다.XSLT v1.0 - document() 외부 템플릿 호출

내 문제는 첫 번째 템플릿 내부에서 두 번째 템플릿을 호출하는 방법입니다. 내 코드 샘플 :

<xsl:template match="Library"> 
    <fo:table table-layout="fixed" width="160mm"> 
    <fo:table-column column-width="80mm"/> 
    <fo:table-column column-width="80mm"/> 
     <fo:table-body> 
      <fo:table-row> 
       <xsl:for-each select="document(Library/@File)/Document/Books"> 
       <xsl:apply-templates select="."/> 
       </xsl:for-each> 
      </fo:table-row> 
      <fo:table-body> 
     </fo:table> 
    </xsl:template> 

나는 템플릿 책에 액세스하려고 :

나는 템플릿 라이브러리 내부입니다 문서 함수 내에서 첫 번째 인수가 보이지 않는다

<xsl:template match="Books"> 
    <fo:table-cell> 
     <fo:block font-family="arial" font-size="8pt" text-align="left"> 
     <xsl:value-of select="substring(@IBAN,4)"/> 
     </fo:block> 
    </fo:table-cell> 
    <fo:table-cell> 
     <fo:block font-family="arial" font-size="8pt" text-align="left"> 
     <xsl:value-of select="@date"/> 
     </fo:block> 
    </fo:table-cell> 
</xsl:template> 

올바르게 설정하십시오. 어떻게 재 작성해야합니까? 비슷한 문제가있는 포럼에서 어떤 문제도 찾을 수 없었습니다. 도움을 주시면 감사하겠습니다.

답변

1

다른 XSLT 파일에서 템플릿을 가져 오려면 xsl:import 또는 xsl:include을 사용하십시오. 기본 입력 XML 외에 지정된. 서에있는 XML에 XSLT 템플리트를 적용하려면 xsl:document을 사용하십시오.

경로가 컴파일 타임에 해결되었으므로 XSLT 파일의 경로에서 변수를 사용할 수 없습니다.

경로를 정적으로 결정할 수없는 경우 (상대 경로 사양을 통해 필요한 변형을 달성 할 수 있음) 전체 조직을 재고해야 할 수 있습니다. 정적으로 @href를 동적으로 작성할 수 있도록 프로그램을 실행하기 전에 프로그래밍 방식으로 XSLT를 작성할 수 있지만 지금까지는 전반적인 솔루션 아키텍처를 다시 고려해야합니다.

+0

안녕하세요. 당신의 대답은 xsl : include와 xsl : document 감사의 차이점을 깨닫게했습니다. 내가 원했던 것은 XSLT 템플릿을 실제로 참조하고 있던 템플릿이 아닌 다른 XML 문서에 적용하는 것이 었습니다. 그것은 XSLT 파일 내부의 경로에 변수를 사용할 수없는 것,하지만 당신이 원하는 템플릿에 도달하는 XPATH를 사용할 수있는 것 같습니다. – jeevana

관련 문제