문제

여러 개의 xslt 스타일시트가 있습니다. xsl:imports 그리고 나는 그것들을 모두 하나의 xslt 파일로 병합하고 싶습니다.

이는 xsl 스타일시트를 메모리에 저장된 문자열 개체로 전달하는 시스템의 한계입니다.이는 변환을 수행하는 원격 시스템으로 전송됩니다.디스크에서 로드되지 않기 때문에 href 링크가 깨졌으므로 제거해야 합니다. xsl:import스타일시트에서 가져온 것입니다.

이를 수행할 수 있는 도구가 있습니까?

도움이 되었습니까?

해결책

XSL 스타일시트를 사용하여 스타일시트를 병합할 수 있습니다.그러나 이는 xsl:import가 아닌 xsl:include 요소를 사용하는 것과 동일합니다(Azat Razetdinov가 이미 지적했듯이).차이점을 읽어보실 수 있습니다 여기.

따라서 먼저 xsl:import를 xsl:include로 바꾸고 충돌을 해결한 후 여전히 올바른 결과를 얻는지 테스트해야 합니다.그런 다음 다음 스타일시트를 사용하여 기존 스타일시트를 하나로 병합할 수 있습니다.마스터 스타일시트에 적용하기만 하면 됩니다.

<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">

<xsl:template match="xsl:include">
  <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/>
</xsl:template>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

첫 번째 템플릿은 href 속성에서 참조되는 파일을 읽는 문서 기능을 사용하여 모든 xsl:include를 포함된 스타일시트로 바꿉니다.두 번째 템플릿은 정체성 변화.

Xalan으로 테스트했는데 잘 작동하는 것 같습니다.

다른 팁

가져온 스타일시트를 중단하지 않고 기본 파일에 포함하는 것은 불가능합니다. 수입 우선순위.예를 들어, 가져온 스타일시트에서 최상위 변수를 정의하고 이를 기본 파일에서 다시 정의합니다.두 개의 파일을 하나로 병합하면 이름과 가져오기 우선순위가 동일한 변수 두 개가 생성되어 오류가 발생합니다.

해결 방법은 xsl:import를 xsl:include로 바꾸고 문제를 해결하는 것입니다. 갈등.그 후에는 xsl:include 명령을 해당 파일의 내용으로 바꿔도 안전합니다. XSLT 프로세서는:

포함은 XML 트리 수준에서 작동합니다.href 속성 값으로 찾은 리소스는 XML 문서로 구문 분석되며 이 문서에 있는 xsl:stylesheet 요소의 하위 요소는 포함 문서에 있는 xsl:include 요소를 대체합니다.템플릿 규칙이나 정의가 포함되어 있다는 사실은 처리 방식에 영향을 주지 않습니다.

수동 병합이 아마도 최선의 선택이 될 것입니다.

주요 고려 사항은 템플릿 일치 논리가 결합된 스타일시트에서 작동하는지 확인하는 것입니다.

왜 그러고 싶나요?일반적으로 이유 때문에 분리됩니다(종종 유지 관리 용이성).

언제든지 병합을 직접 작성할 수 있습니다. XSL 파일을 읽고 관심 있는 템플릿 항목을 선택한 다음 새 마스터 XSL 파일에 쓸 수 있습니다.

 import multiple xsl in single xsl

      <xsl:import href="FpML_FXOption_Trade_Template1.xsl"/>
      <xsl:apply-imports/>

<calypso:keyword>
                <calypso:name>DisplayOptionStyle</calypso:name>
<calypso:value>Vanilla</calypso:value>
</calypso:keyword>

           <xsl:import href="FpML_FXOption_Trade_Template2.xsl"/>
           <xsl:apply-imports/>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top