XSL在最后位置添加新属性

时间:2014-07-31 13:30:50

标签: xml xslt

我想通过xslt修改xml树:

向节点添加属性,但新属性应该是最新的属性。

示例:

<A>
   <B att1="val1" />
</A>

结果:

<A>
  <B att1="val" newAtt="newValue"/>
</A>

通过使用以下xsl,属性newAtt将被放置为B的第一个属性。

<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="B">
    <xsl:copy>
        <xsl:attribute name="newAtt">newValue</xsl:attribute>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

2 个答案:

答案 0 :(得分:1)

井属性没有订单,所以没有确保订购,但你可以尝试

<xsl:template match="B">
    <xsl:copy>
        <xsl:apply-templates select="@*"/>
        <xsl:attribute name="newAtt">newValue</xsl:attribute>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

使用您的XSLT处理器。

答案 1 :(得分:1)

正如马丁所说,属性本质上是无序的。虽然有些XSLT处理器会保留写入属性的顺序,但您不能依赖它。

Saxon可以选择控制序列化属性的顺序:参见

http://www.saxonica.com/documentation/index.html#!extensions/output-extras/attribute-order