我想通过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>
答案 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