У меня есть пример 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
значения, если элементы, где атрибут типа равен.
так, для вышеприведенного примера, выход должен быть,
<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?