Я использую XSLT и мне нужно динамически генерировать тип документа в преобразованном выводе на основе параметра.Я слышал, что этого нельзя сделать с помощью XSLT 1.0, но можно с версией 2.0, используя тег result-document .
До сих пор от следованияответьте на этот вопрос, у меня есть что-то вроде этого:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" indent="yes"/>
<xsl:param name="doctype.system" select="'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'" />
<xsl:param name="doctype.public" select="'-//W3C//DTD XHTML 1.0 Strict//EN'" />
<xsl:template match="/">
<xsl:result-document doctype-public="{$doctype.public}" doctype-system="{$doctype.system}" method="html">
<html>
<head>
<xsl:apply-templates select="report/head/node()"/>
</head>
<body>
<!-- ommitted for brevity -->
</body>
</html>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
Проблема с вышеприведенным не генерируется!
Если я удаляю документ результатовтеги из вышеупомянутого, мое преобразование применено, и документ выведен, как ожидалось.
Есть какие-нибудь подсказки?Правильно ли я использую тег result-document?
ОБНОВЛЕНИЕ : В ответ на некоторые комментарии приведена небольшая версия, которая работает, а другая - нет (безпараметризация инструкции результирующего документа)
Это работает (без результирующего документа):
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<head>
</head>
<body>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Вывод:
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body></body>
</html>
Но это не дает никакого вывода:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<xsl:result-document doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" method="html">
<html>
<head>
</head>
<body>
</body>
</html>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>