我有两个这样的xml数据源:
<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>
然后我需要使用xslt按订单号对项目进行分组并得到如下输出:
productname sku
test1 s9sdidk
test2 123232
---------------------------------
subtotal: 20
total: 23.5
productname sku
test3 s9sd2d32k
test4 s9swe23
---------------------------------
subtotal: 19
total: 26.5
我需要使用html标签,所以我不能使用for-each-groups的东西......请帮忙! 提前谢谢。
答案 0 :(得分:0)
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:key name="kItemByOrdernumber" match="item" use="ordernumber"/>
<xsl:variable name="vSource2" select="document('source2.xml')"/>
<xsl:template match="text()"/>
<xsl:template match="order/ordernumber">
<xsl:variable name="vCurrent" select="."/>
<xsl:text>productname		sku
</xsl:text>
<xsl:for-each select="$vSource2">
<xsl:apply-templates
select="key('kItemByOrdernumber',$vCurrent)"/>
</xsl:for-each>
<xsl:value-of
select="concat('---------------------------------','
',
'	subtotal: ',../subtotal,'
',
'	total: ',../total,'

')"/>
</xsl:template>
<xsl:template match="item">
<xsl:value-of select="concat(productname,'			',
sku,'
')"/>
</xsl:template>
</xsl:stylesheet>
将第一个文档作为输入,将第二个文档作为source2.xml
外部输入,输出:
productname sku
test1 s9sdidk
test2 123232
---------------------------------
subtotal: 20
total: 23.5
productname sku
test3 s9sd2d32k
test4 s9swe23
---------------------------------
subtotal: 19
total: 26.5
答案 1 :(得分:0)
此转化:
<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文档,但处理基本相同,但您需要使用{{1}来解决其中一个问题。功能。