2012-07-23 2 views
0

기본적으로 XSLT 스타일 시트를 가져오고 싶지만 기본 설정에서는 무시하고 템플릿을 호출 할 때만 사용합니다.특정 템플릿에 대해서만 외부 XSLT 사용

우리 콘텐츠에는 사용자 정의 XML + DocBook 스타일 테이블이 포함되어 있으므로 현재 XML => my.xsl => docbook.xsl => XHTML의 두 가지 XSLT로 변환됩니다. my.xsl에서이 모든 작업을 수행 할 수 있습니까?

<!-- My XML --> 
<xsl:template match="a"/> 
<xsl:template match="b"/> 
<xsl:template match="c"/> 

<!-- DocBook XML --> 
<xsl:template match="table"> 
    <xsl:apply-templates select="." mode="docbook"/> 
</xsl:template> 

docbook.xsl 스타일 시트를 가져올 때의 문제점은 기존 템플릿을 방해하는 많은 다른 템플릿을 포함한다는 것입니다. 이상적으로는 docbook.xsl을 지정된 모드로 가져 오는 방법이 있지만 가능하지는 않습니다. docbook.xsl을 수정하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

답변

2

주 스타일 시트의 템플릿은 항상 가져온 스타일 시트의 템플릿보다 우선 순위가 높습니다. 가져온 템플릿을 호출하지 않으려면 필수 상황에서 기본 템플릿을 재정의하십시오.

이것은 바람직한 기술이어야합니다. 대안은 다음과 같습니다.

  1. 잠재적 인 충돌이있는 일치하는 패턴을 식별하십시오.
  2. 두 모드를 구별하기 위해 모드를 사용하십시오.
  3. 확인 된 중복 패턴 중 하나에 맞는 선택에 < xsl : apply-templates> 템플릿을 호출 할 때 적절한 모드 (또는 모드 없음)를 사용하여 원하는 결과를 얻으십시오 (기본 템플릿 대 가져온 템플릿) .
+1

@wst을 당신이 ID가 가져 오기 (주) 스타일 시트 변환을 추가하는 경우, 가져온 템플릿을 호출되지는 결코 명시 적으로 가져온 호출하지 않는 한 xsl : apply-imports를 사용하는 템플릿. – grtjn

1

modes을 사용하십시오.

가져온 스타일 시트에서 모든 템플릿이 아무도 사용하지 않는 고유 한 이름을 가진 모드에 있어야합니다. 예를 들어, prefix:mymode을 사용하고 접두사 prefix을 소유 한 네임 스페이스에 바인딩하십시오.

가져온 스타일 시트에서 처리를 호출하려면, 사용

<xsl:apply-templates select="$vNodesToBeProcessed" mode="prefix:mymode"/> 
+0

불행히도 docbook.xsl은 여러 개의 파일과 수백 개의 템플릿이있는 대형 모듈이므로 모드를 수용 할 수 있도록 쉽게 수정할 수 없습니다. 모든 파일을 정규식으로하여 모든 템플릿에 mode = "docbook"을 추가하려고 시도했지만 더 많은 문제가 발생했습니다. – wst

+0

@wst 그런 다음 * 기본 * 스타일 시트 모듈에서 모드를 사용하십시오. –

관련 문제