Используйте этот однострочный XPath :
/*/*[@number = /*/I_want_to_display/number]
Полный код XSLT (9 строк) :
<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="/">
<xsl:copy-of select="/*/*[@number = /*/I_want_to_display/number]"/>
</xsl:template>
</xsl:stylesheet>
Когда это преобразование применяется к следующему документу XML (так как не был предоставлен правильно сформированный документ XML!):
<t>
<a number="1">
<car>1</car>
</a>
<a number="2">
<dog>1</dog>
</a>
<I_want_to_display>
<number>2</number>
</I_want_to_display>
</t>
желаемый, правильный результат получается :
<a number="2">
<dog>1</dog>
</a>
Объяснение : оператор XPath =
при применении к двум наборам узлов равен true()
для каждой пары узлов (один из первого набора узлов и второй из второго набора узлов) ), которые имеют одинаковое строковое значение.