2009-06-24 11 views
10

Mam transformację XSL, która generuje kod HTML. W elemencie head mam odwołanie do pliku CSS.Jak skopiować zewnętrzny kod CSS i JavaScript w XSLT

<link rel="stylesheet" type="text/css" href="css/styles.css"/> 

Chciałbym stworzyć samodzielny wynik HTML bez odwołań z zewnątrz i dlatego chciałbym dołączyć zewnętrzne odniesienia CSS. Aby zapobiec powielaniu kodu, nie chcę sztywnego kodowania stylów w szablonie XSLT, dlatego szukam polecenia XSLT, aby skopiować zawartość pliku CSS. Wiem, że xsl:include lub xsl:import nie będzie działać, ponieważ oczekują plików XSLT. Nie jest też wymagane oczekiwanie na zgodność z XML.

Mam też pewne deklaracje funkcji JavaScript której chciałbym skopiować również.

Czy to możliwe z czystego XSLT, albo będę musiał wykonać pewne wstępne przetwarzanie pliku XSLT (lub post-processing pliku HTML)?

Odpowiedz

10

XSLT 2.0 udostępnia funkcję nieprzeanalizowane-text() do odczytu dokumentów za pośrednictwem adresu URL, które nie są w formacie XML.

w XSLT 1.0, jeśli nie trzeba być zbyt skrypt o CSS, można użyć następujących aby plik CSS XML-kompatybilne. I na szczęście przeglądarki tolerują komentarze HTML.

CSS

<!--/*--><root><![CDATA[<!--*/--> 
body 
{ 
    margin: 0; 
} 
div > p 
{ 
    background-color: yellow; 
} 
<!--/*-->]]></root><!--*/--> 

XSLT

<style type="text/css"> 
    <xsl:value-of select="document('test.css')" disable-output-escaping="yes" /> 
</style> 
+3

To działa dla mnie. Występują problemy z < > i postaciami. Skończyłem z i ]]> Działa również dla javascript. – GrGr

+0

Czy możesz teraz pokazać swój plik xslt? –

0

Może mógłbyś nakłonić go do myślenia, stylów jest XML.

styles.css

/* 
<?xml version="1.0" encoding="utf-8"?> 
<style> 
<![CDATA[ 
*/ 
... styles ... 
/* 
]]> 
</style> 
*/ 

Jest to hack, ale jeśli nie ma innego sposobu, to może wystarczyć (zakładając, że w ogóle działa).

+1

Co nie zadziała, ponieważ tekst CCS nie jest prawidłowym tekstem XML w żadnym wypadku. Pomyśl na przykład o selektorach "div> p" lub wszystkich nieoznaczonych podwójnymi cudzysłowami w deklaracjach czcionki. – Tomalak

+0

Następnie dodaj sekcję CDATA. Odpowiedz zaktualizowane, aby pokazać użycie. – SpliFF

+0

Nie, nawet z CDATA. xsltproc nie lubi znaku komentarza. Jest napisane: css/styles.css: 1: błąd analizatora składni: oczekiwany tag początkowy, "<" nie znaleziono /* ^ – GrGr

0

Użyj instrukcja przetwarzania zawinąć zawartości CSS:

<?xml version="1.0" encoding="utf-8"?> 
    <root> 
    <?wrapper html 
     <html> 
     <link rel="stylesheet" type="text/css" href="css/styles.css"/> 
     </html> 
    ?> 
    </root> 

Następnie dostosować istniejący xsl:copy-of SELECT, aby go uczynić:

<xsl:copy-of select="document('css/styles.css')//processing-instruction()"/> 
Powiązane problemy