Это одно из самых коротких возможных преобразований, которое также является одним из самых простых и полностью "в духе XSLT ":
<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="address">
<address>
<xsl:value-of select=
"concat(streetno, ' ', streetname, ', ', suburb)"/>
</address>
</xsl:template>
<xsl:template match=
"@incity | shop[not(@incity='yes' and type='Botique')]"/>
</xsl:stylesheet>
при применении кXML-документ :
<shops>
<shop incity="yes" onlineorder="yes">
<type>Botique</type>
<address>
<streetno>23</streetno>
<streetname>collins</streetname>
<suburb>Melbourne</suburb>
</address>
</shop>
<shop incity="yes" onlineorder="yes">
<type>Botique</type>
<address>
<streetno>25</streetno>
<streetname>little collins</streetname>
<suburb>Melbourne</suburb>
</address>
</shop>
<shop incity="no" onlineorder="yes">
<type>Tailoring</type>
<address>
<streetno>2</streetno>
<streetname>cosmos street</streetname>
<suburb>Glenroy</suburb>
</address>
</shop>
</shops>
желаемый, правильный результат :
<shops>
<shop onlineorder="yes">
<type>Botique</type>
<address>23 collins, Melbourne</address>
</shop>
<shop onlineorder="yes">
<type>Botique</type>
<address>25 little collins, Melbourne</address>
</shop>
</shops>
Примечание :
Переопределение «шаблона идентификации» - наиболее фундаментальный и мощный шаблон проектирования XSLT.
Сопоставление с образцоми абсолютно никаких условных инструкций XSLT.