Похоже, вам нужна строка для каждого элемента Tag2 , и в этом случае их легко сопоставить, выполнив следующее (при условии, что в данный момент вы находитесь на элементе info * 1005). *
<xsl:apply-templates select="Tag1/Tag2" />
Но похоже, что вы хотите найти информацию из Tag5 элементов. В этом случае вы можете использовать ключ для поиска таких значений на основе элемента No . Ключ будет определен следующим образом:
<xsl:key name="Tags" match="Tag5" use="No" />
И чтобы найти теги для данного элемента Tag2 , вы можете сделать следующее:
<xsl:apply-templates select="key('Tags', normalize-space(Tag3/PartNo))" />
(Обратите внимание, нормализовать-пробел с удалением лишнего пробела из элемента)
Вот полный XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" indent="yes"/>
<xsl:key name="Tags" match="Tag5" use="No" />
<xsl:template match="/info">
<xsl:text>ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2</xsl:text>
<xsl:value-of select="' '" />
<xsl:apply-templates select="Tag1/Tag2" />
</xsl:template>
<xsl:template match="Tag2">
<xsl:apply-templates select="key('Tags', normalize-space(Tag3/PartNo))" />
<xsl:value-of select="concat(DBOMInf1, '|', DBOMInf2, ' ')" />
</xsl:template>
<xsl:template match="Tag5">
<xsl:value-of select="concat(Id, '|', No, '|', Name, '|', Description, '|')" />
</xsl:template>
</xsl:stylesheet>
При применении к вашему входному XML выводится следующий текст
ACTIONID|NO|DESCRIPTION|NAME|DBOMInf1|DBOMInf2
700|12|Engine|1200 liter | 111 | sring
700|12|Engine|1200 liter | 555 | abcd