我可以在XSLT样式表中有条件地设置 属性吗?

问题描述 投票:1回答:1

[我正在尝试使某些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元素必须为空。

是否有一种方法可以在样式表的上下文中执行类似的操作,或者我是否必须在更高级别上操纵这些属性?

xslt saxon docbook
1个回答
0
投票

您已经标记了此docbook,我怀疑这是为什么您仍在使用古老的Saxon 6.5.5处理器及其http://icl.com/saxon命名空间的原因。但是,可以使docbook样式表与现代版本的Saxon一起使用,这使您可以在xsl:result-document指令中动态选择序列化属性。

[一种替代方法是从Java API或命令行覆盖xsl:output属性。但是,在您要使属性依赖于源文档中某些内容的情况下,这很尴尬。

© www.soinside.com 2019 - 2024. All rights reserved.