У меня есть XML:XSLT заменить значение атрибутов, которые продублированы из родительского узла
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<tag1 id="abc" name="first tag">
<tag2 id="efg" name="embedded tag1">
</tag2>
</tag1>
<tag1 id="hij" name="first tag">
<tag2 id="hij" name="embedded tag1">
</tag2>
</tag1>
<LOTS OF TAG1/TAG2S>...</>
</ROOT>
Я хотел бы узнать узлы tag2, которые имеют такое же значение идентификатора в качестве значения идентификатора Узла tag1 родителей, заменяющего значение идентификатора tag2 с исходным идентификатором с суффиксом «D».
В приведенном выше примере: tag2 имеет ИД "Hij", которая является такой же, как его родительского узла tag1, следовательно, он должен быть заменен, как:
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<tag1 id="abc" name="first tag">
<tag2 id="efg" name="embedded tag1">
</tag2>
</tag1>
<tag1 id="hij" name="first tag">
<tag2 id="hijD" name="embedded tag1">
</tag2>
</tag1>
<LOTS OF TAG1/TAG2S>...</>
</ROOT>
Я написал XSLT:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="//tag2/@id[.=../tag1/@id]">
<xsl:with-param name="id" select="@id" />
<xsl:with-param name="extra" select="'D'" />
<xsl:attribute name="id">
<xsl:value-of select="concat($id,$extra)"/>
</xsl:attribute>
</xsl:template>
Не работает так, как ожидалось. Любые огни будут оценены!