[我正在尝试使某些xslt转换自动化,并且我需要一种方法来根据要转换的XML文件中的内容来设置xsl:output属性。
特别是,我想查看XML文件,从根元素中获取lang属性,并根据lang值设置属性。
我尝试了以下操作:
<xsl:param name="language">
<xsl:value-of select="//*/@lang"/>
</xsl:param>
<xsl:output method="xml" xmlns:saxon="http://icl.com/saxon" encoding="utf-8">
<xsl:choose>
<xsl:when test="$language != 'ja'">
<xsl:attribute name="saxon:character-representation"><xsl:value-of select="'native'"/></xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="saxon:character-representation"><xsl:value-of select="'hex'"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
</xsl:output>
...但是我的解析器通知我xsl:output元素必须为空。
是否有一种方法可以在样式表的上下文中执行类似的操作,或者我是否必须在更高级别上操纵这些属性?
您已经标记了此docbook
,我怀疑这是为什么您仍在使用古老的Saxon 6.5.5处理器及其http://icl.com/saxon
命名空间的原因。但是,可以使docbook样式表与现代版本的Saxon一起使用,这使您可以在xsl:result-document
指令中动态选择序列化属性。
[一种替代方法是从Java API或命令行覆盖xsl:output
属性。但是,在您要使属性依赖于源文档中某些内容的情况下,这很尴尬。