Это простое (короткое, только один шаблон, без режимов, без осей) и мощное (параметризованное для работы с любым возможным идентификатором группы) преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="pGroupId" select="'20'"/>
<xsl:variable name="vGroup" select=
"/*/Group[GroupSelector=$pGroupId]"/>
<xsl:template match="/">
<GroupSelection ElementName="FoundGroup"
Missing="{not($vGroup)}">
<xsl:apply-templates select="$vGroup/GroupSelector"/>
</GroupSelection>
<GroupSelection ElementName="GroupDes"
Missing="{not($vGroup)}">
<xsl:apply-templates select="$vGroup/GroupDescription"/>
</GroupSelection>
<GroupSelection ElementName="GroupVal"
Missing="{not($vGroup)}">
<xsl:apply-templates select="$vGroup/GroupValue"/>
</GroupSelection>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<Groups>
<Group>
<GroupSelector>52</GroupSelector>
<GroupDescription>Group 52</GroupDescription>
<GroupValue>ABCD</GroupValue>
</Group>
<Group>
<GroupSelector>27</GroupSelector>
<GroupDescription>Group 27</GroupDescription>
<GroupValue>PQRS</GroupValue>
</Group>
<Group>
<GroupSelector>20</GroupSelector>
<GroupDescription>Group 20</GroupDescription>
<GroupValue>XYZA</GroupValue>
</Group>
<Group>
<GroupSelector>15</GroupSelector>
<GroupDescription>Group 15</GroupDescription>
<GroupValue>MNOP</GroupValue>
</Group>
</Groups>
дает требуемый, правильный результат :
<GroupSelection ElementName="FoundGroup" Missing="false">20</GroupSelection>
<GroupSelection ElementName="GroupDes" Missing="false">Group 20</GroupSelection>
<GroupSelection ElementName="GroupVal" Missing="false">XYZA</GroupSelection>
Если в вышеуказанном документемы изменили :
<GroupSelector>20</GroupSelector>
на :
<GroupSelector>21</GroupSelector>
и применили то же преобразование к измененному документу XML, снова к желаемому,получен правильный результат :
<GroupSelection ElementName="FoundGroup" Missing="true"/>
<GroupSelection ElementName="GroupDes" Missing="true"/>
<GroupSelection ElementName="GroupVal" Missing="true"/>
Пояснение : Использование:
<xsl:variable>
AVT (шаблоны значений атрибутов).
Модель обработки XSLT и встроенный шаблон для текстаузлы .