Существует чрезвычайно простое (без явных условных обозначений, без осей) решение XSLT :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="ISO-8859-1"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="cd/title[not(position() = last())]"/>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному документу XML :
<catalog>
<cd>
<artist>Bob Dylan</artist>
</cd>
<cd>
<title>Hide your heart</title>
</cd>
<cd>
<title>old_value</title>
<title>inbetween_value</title>
<title>new_value</title>
</cd>
</catalog>
желаемый, правильный результат получается :
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<artist>Bob Dylan</artist>
</cd>
<cd>
<title>Hide your heart</title>
</cd>
<cd>
<title>new_value</title>
</cd>
</catalog>