Вероятно, самое короткое решение - это :
<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=
"var[name='connection1']/value/text()">ssl</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к предоставленному документу XML :
<sample>
<vars>
<var>
<name>connection1</name>
<value>tcp</value>
</var>
<var>
<name>connection2</name>
<value>ssl</value>
</var>
</vars>
</sample>
желаемый, правильный результат получен :
<sample>
<vars>
<var>
<name>connection1</name>
<value>ssl</value>
</var>
<var>
<name>connection2</name>
<value>ssl</value>
</var>
</vars>
</sample>
Пояснение :
В этом решении используется самый фундаментальный шаблон проектирования XSLT: использование правила идентификации для копирования каждого узла как есть и его переопределения с помощью шаблона, соответствующего конкретному узлу, который нужно только изменить.