У меня есть таблица стилей 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>
основной таблицей стилей.
Я искал лучшую идею, но, видимо, ее нет. Следуя советам Эндрю Хэра и Джеловирта, я написал два «драйвера», две простые таблицы стилей, которые называются <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>