如何更改属性之一中的值?

时间:2019-07-10 10:22:05

标签: xml xslt

我有一个源XML文档:

Session

使用哪种XSLT转换将上述XML文档转换为此:

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

1 个答案:

答案 0 :(得分:0)

我将假设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>