Во-первых, ваш ключ Article
выглядит неправильно (в контексте вашего вопроса), поскольку в вашем XML нет элементов tLoading
.Так и должно быть ...
<xsl:key name="Article" match="TL" use="ArticleNr"/>
Но чтобы ответить на ваш прямой вопрос, вам нужно определить свой ключ prod
следующим образом:
<xsl:key name="prod"
match="query[@name='q2']/results/record"
use="../../parameters/parameter[@name='prodCode']"/>
Затем, чтобы найти его, сделайте это ...
<xsl:value-of select="key('prod', ArticleNr)/column[@name='ExternalProductId']"/>
Или, может быть, так как у них запрос "q2" имеет два ExternalProductIds ...
<xsl:value-of select="key('prod', ArticleNr)/column[@name='ExternalProductId'][. != '']"/>
Попробуйте этот XSLT (который сохраняет вашу отдельную проверку,и так выводит только две строки)
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="Article" match="TL" use="ArticleNr"/>
<xsl:key name="prod" match="query[@name='q2']/results/record" use="../../parameters/parameter[@name='prodCode']"/>
<xsl:template match="DS">
<msglist>
<xsl:for-each select="./TL[./msg/output_getquerydata/queries/query/results/record/column[@name='actionState'] !='finished'] ">
<xsl:variable name="distinctArticle" select="//TL[string(ArticleNr)][count(. | key('Article',ArticleNr)[1]) = 1]"/>
<msg>
<xsl:for-each select="$distinctArticle">
<load-part>
<productId>
<xsl:value-of select="ArticleNr" />
<xsl:text> - </xsl:text>
<xsl:value-of select="key('prod', ArticleNr)/column[@name='ExternalProductId'][. != '']"/>
</productId>
</load-part>
</xsl:for-each>
</msg>
</xsl:for-each>
</msglist>
</xsl:template>
</xsl:stylesheet>