У меня есть таблица стилей XSLT 1.0 (2.0 не вариант), которая создает XHTML. Он может, в зависимости от параметра, создать полный XHTML-валидный документ или просто <div>...</div>
фрагмент, предназначенный для включения в веб-страницу.
Моя проблема заключается в создании разных XML-объявлений в этих двух случаях. Для отдельной страницы мне нужно:
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
И для <div>
:
<xsl:output omit-xml-declaration="yes"/>
Но <xsl:output>
не может быть включено в <xsl:if>
. Это может быть только прямой дочерний элемент <xsl:stylesheet>
.
Единственное решение, которое я вижу, это создать таблицу стилей с большинством шаблонов, а затем две небольшие «обертки» с правильным <xsl:output>
и которые будут <xsl:import>
основной таблицей стилей.
Я искал лучшую идею, но, видимо, ее нет. Следуя советам Эндрю Хэйра и jelovirt, я написал два «драйвера», две простые таблицы стилей, вызывающие правильный <xsl:output>
, а затем основную таблицу стилей. Вот один из этих драйверов, для автономного HTML:
<?xml version="1.0" encoding="us-ascii"?>
<!-- This file is intended to be used as the main stylesheet, it creates a
standalone Web page.
-->
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:import href="traceroute2html.xsl"/>
<xsl:param name="standalone" select="'true'"/>
<xsl:output doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
</xsl:stylesheet>