Как указано в ответе @svick, выражение XPath может выбирать набор узлов из XML-документов, но не может изменять XML-документ (ы) или создавать новый документ (ы).
Вот преобразование XSLT, которое создает новый XML-документ, в котором атрибуты z
опущены, а атрибуты y
умножены на 2.
<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="@z"/>
<xsl:template match="@y">
<xsl:attribute name="y">
<xsl:value-of select="2* ."/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
, когда применяется это преобразованиев предоставленном XML-документе (исправлено, чтобы быть правильно сформированным):
<a>
<b x="1" y="2" z="3"/>
<b x="2" y="2" z="3"/>
</a>
желаемый, правильный результат получен :
<a>
<b x="1" y="4"/>
<b x="2" y="4"/>
</a>
Простота и мощь этого решения обусловлены использованием одного из самых мощных шаблонов проектирования XSLT: использование правила идентификации и его переопределения с конкретными шаблонами только для узлов, которые должны обрабатываться определенным образом.