首页 > 解决方案 > 如何更改其中一个属性的值?

问题描述

我有一个源 xml 文档:

<A>
  <B VALUE = "1"/>
  <B VALUE = "1"/>
</A>

使用什么 XSLT 转换将上述 XML 文档转换为:

<A>
  <B VALUE = "1"/>
  <B VALUE = "2"/>
</A>

标签: xmlxslt

解决方案


我将假设在想要的输出中,VALUE属性的值应该是其父元素在序列中的位置/A/B

然后这个转变

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

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

  <xsl:template match="B/@VALUE[not(. = count(../preceding-sibling::B) +1 )]">
    <xsl:attribute name="VALUE">
      <xsl:value-of select="count(../preceding-sibling::B) + 1"/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时

<A>
  <B VALUE = "1"/>
  <B VALUE = "1"/>
</A>

产生想要的结果

<A>
   <B VALUE="1"/>
   <B VALUE="2"/>
</A>

推荐阅读