Одна из ваших проблем заключается в том, как вы определяете переменную line
<xsl:variable name="line" select="//Node_1/Line"/>
. При этом выбираются все элементы Line
из всех элементов Node_1
в вашем XML.Это означает, что когда вы делаете <xsl:if test="Line=$line">
, это на самом деле будет возвращать true независимо от того, что Node_1
вы обрабатываете, таким образом вы будете выводить все Node_2
элементов.
Вы должны определить это так
Однако для эффективного поиска используйте клавишу
<xsl:key name="node2" match="Node_2" use="Line" />
. Затем вы можете выбрать элементы Node_2
, например,
<xsl:for-each select="key('node2', $line)">
или дажекак это, так как в этом случае нет необходимости в переменной, так как текущий узел все еще Node_1
в этот момент
<xsl:for-each select="key('node2', Line)">
Попробуйте это XSLT
<xsl:stylesheet version = "1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:key name="node2" match="Node_2" use="Line" />
<xsl:template match="/">
<xsl:for-each select="Node/Node_1">
<node>
<line><xsl:value-of select="Line"/></line>
<text><xsl:value-of select="Text"/></text>
<desc><xsl:value-of select="Desc"/></desc>
<cust><xsl:value-of select="Cust"/></cust>
<xsl:for-each select="key('node2', Line)">
<subnode>
<readind><xsl:value-of select="ReadInd"/></readind>
<writeind><xsl:value-of select="WriteInd"/></writeind>
<updateind><xsl:value-of select="UpdateInd"/></updateind>
</subnode>
</xsl:for-each>
</node>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
(Примечание,Я добавил создание тегов node
и subnode
, чтобы было легче видеть правильные Node_2
элементы, связанные с каждым Node_1
)