我可以设置<;xsl:output/>;XSLT样式表中有条件的属性?

我可以设置<;xsl:output/>;XSLT样式表中有条件的属性?,xslt,saxon,docbook,Xslt,Saxon,Docbook,我正在尝试自动化一些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

我正在尝试自动化一些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
指令中动态选择序列化属性


另一种方法是从JavaAPI或命令行重写
xsl:output
属性。但是,如果您想使属性依赖于源文档中的某些内容,这就很尴尬了。

请注意,使用
encoding=“us ASCII”
可以更好地解决下划线问题(控制非ASCII字符在输出中的表示方式)。这是带有XSLT 1的Saxon 6还是带有XSLT 2或3的Saxon 9?
xsl:output
指令的属性不是。因此,如果您想通过一些XML文档内容定义这些内容,则需要执行两步转换:转换/创建具有正确属性的样式表,然后执行正确的转换。在XSLT 2/3和Saxon 9 PE或EE中,使用
xsl:result document
,您可以使用属性值模板,请参阅,我还没有检查这是否适用于特定于Saxon的扩展属性。@MartinHonnin-Saxon 6和XSLT1