0
我有一個示例XML這樣,XSLT - 通過比較其它元素的副本屬性屬性
<doc>
<aa type="aaa" id="ggg">text</aa>
<aa type="bbb" id="hhh">text</aa>
<aa type="ccc" id="iii">text</aa>
<aa type="ccc" id="jjj">text</aa>
<aa type="bbb" id="kkk">text</aa>
<aa type="aaa" id="lll">text</aa>
</doc>
正如你可以看到有2個元素等於type
這裏屬性,我需要的是互換id
屬性存在什麼值如果type屬性相等的元素。
因此,對於上面的例子中,輸出應該是,
<doc>
<aa type="aaa" id="lll">text</aa>
<aa type="bbb" id="kkk">text</aa>
<aa type="ccc" id="jjj">text</aa>
<aa type="ccc" id="iii">text</aa>
<aa type="bbb" id="hhh">text</aa>
<aa type="aaa" id="ggg">text</aa>
</doc>
我寫了下面的xsl要做到這一點,
<xsl:template match="aa[@type='aaa' or @type='bbb' or @type='ccc'][1]">
<xsl:copy>
<xsl:if test="following::aa[@type=self::node()/@type]">
<xsl:attribute name="id">
<xsl:value-of select="following::aa[@type=self::node()/@type]/@type"/>
</xsl:attribute>
</xsl:if>
</xsl:copy>
</xsl:template>
<xsl:template match="aa[@type='aaa' or @type='bbb' or @type='ccc'][2]">
<xsl:copy>
<xsl:if test="following::aa[@type=self::node()/@type]">
<xsl:attribute name="id">
<xsl:value-of select="preceding::aa[@type=self::node()/@type]/@type"/>
</xsl:attribute>
</xsl:if>
</xsl:copy>
</xsl:template>
但是這並不如預期,任何人建議我一個方法我怎樣才能使用XSLT做到這一點?