为什么我的 XSLT `xsl:attribute` 在放置在 `xsl:element` 中的 `xsl:text` 之后时消失了?

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

我正在进行 XSLT 转换,以创建具有

<button>
属性的 HTML
onclick
元素。当我定义
onclick
属性 before 按钮的文本内容时,一切都会按预期工作。这是有效的代码:

<xsl:element name="button">
    <xsl:attribute name="onclick">
        console.log(600);
    </xsl:attribute>
    
    <xsl:text>Click Me</xsl:text>
</xsl:element>

输出:

<button onclick="console.log(600);">Click Me</button>

但是,如果我将

xsl:attribute
放在 xsl:text
 内容之后,如下所示:

<xsl:element name="button"> <xsl:text>Click Me</xsl:text> <xsl:attribute name="onclick"> console.log(600); </xsl:attribute> </xsl:element>
该属性被忽略,输出仅包含文本:

<button>Click Me</button>
为什么将

xsl:attribute

放在
xsl:text
之后会导致属性消失? XSLT 中是否有一条规则要求在内容之前定义属性?如果是,其背后的原因是什么?为什么它会这样?

html xml xslt xslt-1.0
1个回答
0
投票
规则位于

https://www.w3.org/TR/xslt-10/#creating-attributes:

以下均为错误:

在添加子元素后向元素添加属性 它;实现可能会发出错误信号或忽略 属性。

所以,是的,您需要在任何子节点(如文本节点)之前输出属性,否则您可能会收到错误或 XSLT 处理器会忽略该属性。

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