2009-10-25 4 views
5

xsl 스타일 시트를 사용하는 웹 사이트를 만들고 다른 시트가 가져 오는 util 스타일 시트에 작은 함수 라이브러리를 구축하고 있습니다.xsl : import 및 xsl : Google 크롬에서 스타일 시트의 포함이 작동하지 않습니다.

<xsl:import href="util" /> 

각 시트의 맨 위에. 아직 xsl : import를 지원하지 않으므로 Google 크롬에서는 작동하지 않습니다. 누군가 내게 xsl : import 행을 읽고 클라이언트에게 보내기 전에 관련 스타일 시트를 가져올 서버 측에서 실행할 수있는 스타일 시트를 작성해 주실 수 있습니까? 어떻게하지 ...

<?php 
$sXml = "<xml>"; 
$sXml .= "<testtag>hello tester</testtag>"; 
$sXml .= "</xml>"; 

# LOAD XML FILE 
$XML = new DOMDocument(); 
$XML->loadXML($sXml); 

# START XSLT 
$xslt = new XSLTProcessor(); 
$XSL = new DOMDocument(); 
$XSL->load('xsl/index.xsl', LIBXML_NOCDATA); 
$xslt->importStylesheet($XSL); 
#PRINT 
print $xslt->transformToXML($XML); 
?> 

+0

서버 측에서 xml을 구문 분석하고 싶지 않지만 다른 xsl 문서에 적용 할 수있는 xsl 문서가 필요합니다. 내가 읽은 문서에서, 나는 "document()"함수를 사용하는 것을 execting 할 것이다. –

답변

5

다음과 같이 Chrome을 사용하기 전에 스타일 시트 서버를 결합합니다. xsl:import은 모든 장소를 가져온 스타일 시트로 바꾸는 것과 같지 않기 때문에 첫 번째 단계가 마련되어 있습니다.

  • 를 사용하여 아래의 서버 측 스타일 시트 전에 하나에 병합 모든 xsl:importxsl:include와 교체

    1. (대신 코드 사용 우선 순위를 변경해야 할 수 있도록 수입 우선 순위는, xsl:include 적용되지 않습니다) 제공
    2. 몇 주를 기다릴 수 있습니다 (몇 개월이 될 수 있음). Chrome 용 수정 프로그램을 만들었으며 현재 개발자 팀과 협력하여 수정 사항을 빌드에 포함합니다.
    <xsl:template match="node()"> 
        <xsl:copy> 
         <xsl:copy-of select="@*"/> 
         <xsl:apply-templates select="node()"/> 
        </xsl:copy> 
    </xsl:template> 
    
    <xsl:template match="xsl:include"> 
        <!-- you'll probably want to be a bit more restrictive here --> 
        <xsl:copy-of select="document(@href)/xsl:stylesheet/*" /> 
    </xsl:template> 
    

    업데이트 : 그냥 참고 : 크롬 버그가 너무 사파리에 나타납니다.

  • +0

    고마워, 내가 필요한 것. 장기적인 수정에 대해서도 듣기 좋다! –

    +0

    당신은 환영합니다 :) 나는 StackOverflow에 SO 버그를보고 할 것입니다. (필자가 초 초 텍스트를 제거하면 전체 코드 블록이 사라집니다 ... 이상합니다). – Abel

    +0

    Chrome 수정 사항에 대한 소식이 있습니까? – Mikl

    1

    PHP는이 같은 시도 다음과 같이하십시오 :

    import libxml2, libxslt 
    
    styledoc = libxml2.parseFile("page.xsl") 
    style = libxslt.parseStylesheetDoc(styledoc) 
    doc = libxml2.parseFile("somefile.xml") 
    result = style.applyStylesheet(doc, None) 
    

    그런 다음 다시 처리하십시오.

    2

    당신은 libxml2를하고 libxslt를 모듈을 파이썬에서 그것을 할 수있는 당신을 위해 모든 작업을하지만, 뭔가 시작 :

    0

    http://www.w3.org/TR/xslt#literal-result-element은 기존 XSL 스타일 시트를 <xsl:import> 확장 된 XSL 스타일 시트로 변환하는 XSL 스타일 시트를 작성할 때 duplicate-xsl-namespace 문제를 해결하는 방법을 보여줍니다.

    <xsl:import><xsl:include>의 차이점에주의하십시오.