Даже если я попытаюсь сделать только личную копию:
...
Я только получаю
link-элемент без условного комментария вокруг него.
Если это правда, в чем я сомневаюсь, значит, вы используете очень глючный XSLT-процессор . Ни один совместимый XSLT-процессор не удалит комментарий и выдаст текст комментария - без соответствующих инструкций XSLT (в пределах шаблона, соответствующего comment()
).
Конечно, я не смог воспроизвести эту «проблему» , попробовав 6-7 различных процессоров XSLT с этим преобразованием:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
При применении к этому документу XML (комментарий, завернутый в один верхний элемент, чтобы стать правильно сформированным документом XML):
<html>
<!--[if lte IE 7]> <link rel='stylesheet' href='ie.css' type='text/css' /> <![endif]-->
</html>
результат точно такой же XML-документ :
<html>
<!--[if lte IE 7]> <link rel='stylesheet' href='ie.css' type='text/css' /> <![endif]-->
</html>
Сказав это, сгенерировать такой «комментарий» немного сложнее - вот демонстрация, как это сделать:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/*">
<html>
<xsl:text disable-output-escaping="yes">
<!--[if lte IE 7]> </xsl:text>
<link rel='stylesheet' href='ie.css' type='text/css' />
<xsl:text disable-output-escaping="yes"> <![endif]-->
</xsl:text>
</html>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к любому XML-документу (в нашем примере это не используется), получается требуемый правильный вывод :
<html>
<!--[if lte IE 7]> <link rel="stylesheet" href="ie.css" type="text/css"/> <![endif]-->
</html>