Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

IE Comentariile condiţionale în XSLT 1.0

Mesaj Zen grădinar Dave Shea este Bye Bye Tan Hack a atras un număr de comentarii de la oameni, susţinând că comentariile condiţionată Internet Explorer (CC) au fost ungeneratable dacă utilizaţi XSLT pentru a produce paginile dvs.. "Ciudat," m-am gândit, "Am facut asta inainte."

Am lucrat cu XSLT de mai mulţi ani, iar proiectul Eu sunt în prezent de lucru pe care le foloseşte intens; obtinerea de lucru CC a fost foc mic undeva jos lista mea de todo. (Nu am putut recicleze eforturile anterioare pentru motive plictisitoare, IP legale.) Aşa că am pus pe treabă, şi sunt fericit să prezinte un şablon XSLT care vă va construi comentariile dvs. condiţionată pentru tine. L-am testat cu Xalan 2.2, Saxon 6.5.3, MSXML 3 şi MSXML 4 (acestea fiind singurele procesoare XSLT am avut la îndemână), si a functionat perfect cu toate acestea.

În plus, am creat o pentru Firefox, Internet Explorer si Safari (2.0.1 pe Tiger, oricum). Acest fisier XML utilizează un format de pagina XSL care generează un comentariu condiţionată. Utilizarea inspectorului Firefox DOM se poate vedea că în comentariu este creat corect. Utilizarea Internet Explorer, o foaie de stiluri este legată care modifică aspectul poziţia a paginii. Acest lucru demonstrează că tehnica am descris poate fi utilizat client-side, precum şi în server-side transformări.

În primul rând, modelul:


<xsl:template name="conditionalComment">
    <xsl:param name="qualifier" select="'IE'"/>
    <xsl:param name="contentRTF" select="''" />
    <xsl:comment>[if <xsl:value-of select="$qualifier"/>]<![CDATA[>]]>
        <xsl:copy-of select="$contentRTF" />
        <![CDATA[<![endif]]]></xsl:comment>
</xsl:template>

Uşor, da? Ei bine, poate nu, să ne uităm la ea cu un pas la un moment dat.

Şablonul are doi parametri:

calificativ
De calificare pentru "dacă" clauza de comentariu. Implicit la "IE", care vizează orice versiune de Internet Explorer care recunoaşte comentarii condiţionată.
contentRTF
Organismul de comentariu: chestii care IE devine pentru a vedea (în funcţie de calificativ). Acest lucru este trecut ca un fragment copac rezultat, dacă nu sunteţi sigur ce înseamnă că, poate doriţi să mergeţi şi citiţi secţiunea relevantă din spec. XSLT. Valori prestabilite pentru un şir gol.

Putem invoca şablon folosind codul de mai jos:


<xsl:call-template name="conditionalComment">
    <xsl:with-param name="qualifier" select="'lte IE 6'"/>
    <xsl:with-param name="contentRTF">
        &lt;link rel="stylesheet" type="text/css" href="ie-win-fixup.css" /&gt;
    </xsl:with-param>
</xsl:call-template>

Asta ne va da un comentariu condiţionată de direcţionare versiuni Internet Explorer 6 şi mai jos ("LTE IE 6"). NOTA: Nu am incurcat entităţi personajul meu acolo; HTML dorim să ieşire într-adevăr este exprimat după cum vedeţi mai sus in codul XSLT.

Deci, cum funcţionează?

Comentariu este generat folosind element. Reţineţi că vrem să păstrăm un control strict al spaţiile noastre de aici, ceea ce face restul a şablonului destul de ilizibil. Divizat în părţile sale componente, avem:

<xsl:comment>
Începe scoate în comentariu noastre la copac rezultat. De ieşire până acum: ! <-
[if <xsl:value-of select="$qualifier"/>]
Începe adăugarea pe biţi necesari pentru a face IE interpreta acest lucru ca pe un comentariu condiţionată, folosind valoarea parametrului de calificare. În cazul exemplu, producţia noastră este acum de până la <!--[ if IE 6 LTE]
<[CDATA! [>]]>
Această secţiune CDATA este tratată ca prime de caractere pentru a copia la pomul rezultatul cu procesorul XSLT. Deci, producţia noastră devine: <!--[ if lte IE 6]>, care este începutul de comentariu noastre condiţionate.
<xsl:copy-of select="$contentRTF"/>
Acest exemplare doar conţinutul fragmentului nostru copac rezultat la copac rezultat. Producţia noastră este acum:
 
<!--[ If IE 6 LTE]> <link rel="stylesheet" type="text/css" xhref="ie-win-fixup.css" mce_href="ie-win-fixup.css" />

Observaţi că referinţele caracterul entitate am trecut în în contentRTF ( < şi > ) au fost transformate în personajele reale ne-am dorit, prin magia de fragmente copac rezultat. (De fapt, aceasta tehnica poate fi abuzat, pentru a permite invalid de ieşire XML dintr-un procesor XSLT, care este motivul pentru care nu este probabil să supravieţuiască în XSLT 2.0.)

<[CDATA [!>! [Endif]]]>
Linia noastra de finală utilizează o altă secţiune CDATA să furnizeze markup IE trebuie să recunoască la sfârşitul anului în comentariu, şi apoi se închide în comentariu noastre. Observati din nou că nu există nici spaţiul liber între secţiunea CDATA şi elementul de închidere-comentariu: acest lucru este în cazul în care parser IE CC ar putea călătoria în sus, aşa că am face face cu un unreadability puţin de dragul de a obţine rezultatul ne-o dorim, care, în toate splendoare splendid, acum arata ca:


<!--[ If IE 6 LTE]> 
<link rel="stylesheet" type="text/css" href="ie-win-fixup.css" /> 
<[endif] ->

Deci nu l-aţi: un şablon XSLT pentru crearea de Internet Explorer comentarii condiţionată. Să sperăm că re-direcţionarea hacks dvs. CSS în pregătire pentru noua eră tocmai a devenit un pic mai uşor.

Published (Last edited): 10-10-2011 , source: http://www.nickfitz.co.uk/2005/10/27/ie-conditional-comments-in-xslt-10/