Это преобразование :
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kitemByOrder" match="item" use="ordernumber"/>
<xsl:param name="pmaxSize" select="100"/>
<xsl:template match="*">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="order">
productname<xsl:text>	</xsl:text>sku
<xsl:apply-templates select="key('kitemByOrder', ordernumber)"/>
---------------------------------
subtotal: <xsl:value-of select="subtotal"/>
total: <xsl:value-of select="total"/>
<xsl:text>

</xsl:text>
</xsl:template>
<xsl:template match="item">
<xsl:value-of select="concat(productname, '		', sku, '
')"/>
</xsl:template>
<xsl:template match="orderitems"/>
</xsl:stylesheet>
при применении к предоставленному XML-документу (исправлено, поскольку оно было неправильно сформировано):
<t>
<orders>
<order>
<ordernumber>123</ordernumber>
<subtotal>20</subtotal>
<total>23.5</total>
</order>
<order>
<ordernumber>234</ordernumber>
<subtotal>19</subtotal>
<total>26.5</total>
</order>
</orders>
<orderitems>
<item>
<ordernumber>123</ordernumber>
<productname>test1</productname>
<sku>s9sdidk</sku>
</item>
<item>
<ordernumber>123</ordernumber>
<productname>test2</productname>
<sku>123232</sku>
</item>
<item>
<ordernumber>234</ordernumber>
<productname>test3</productname>
<sku>s9sd2d32k</sku>
</item>
<item>
<ordernumber>234</ordernumber>
<productname>test4</productname>
<sku>s9swe23</sku>
</item>
</orderitems>
</t>
дает требуемый, правильный результат :
productname sku
test1 s9sdidk
test2 123232
---------------------------------
subtotal: 20
total: 23.5
productname sku
test3 s9sd2d32k
test4 s9swe23
---------------------------------
subtotal: 19
total: 26.5
Примечание : вы можете использовать два разных XML-документа для двух источников данных, нообработка в основном та же, за исключением того, что вам нужно обратиться к одному из них с помощью функции document()
.