我的XML看起来像这样
<page>
<orderhistory>
<order>
<ordernr>10610000000001</ordernr>
<orderrecord>
<productcategory>Something</productcategory>
</orderrecord>
<orderrecord>
<productcategory>Something</productcategory>
</orderrecord>
<orderrecord>
<productcategory>Something</productcategory>
</orderrecord>
</order>
<order>
<ordernr>10210000000001</ordernr>
<orderrecord>
<productcategory>Something</productcategory>
</orderrecord>
</order>
<order>
<ordernr>10110000000001</ordernr>
<orderrecord>
<productcategory>Something</productcategory>
</orderrecord>
</order>
<order>
<ordernr>10310000000001</ordernr>
<orderrecord>
<productcategory>Something</productcategory>
</orderrecord>
<orderrecord>
<productcategory>Forms</productcategory>
</orderrecord>
</order>
</orderhistory>
我想要的是显示属于单个订单的所有产品类别。因此,如果一个订单中有更多订单记录,我想显示所有类别而不重复 接下来的订单。
但它看起来像这样
03-06-2009 10610000000001 something something
03-06-2009 10210000000001 something
03-06-2009 10110000000001 something
03-05-2009 10310000000001 Forms something
我制作了一个XSL来对orderrecords中的productcategories进行分组,以便删除重复项。它似乎工作正常,但问题是我希望它按顺序分组。
<xsl:key name="orderrecord-by-productcategory" match="orderrecord" use="productcategory" />
<xsl:template match="/page/orderhistory/order">
<xsl:for-each select="orderrecord[generate-id(.) =generate-id(key('artists-by-country', productcategory)[1])]" >
<xsl:value-of select="productcategory" />
</xsl:for-each>
</xsl:template>
我的输出现在看起来像这样
03-06-2009 10610000000001 something
03-06-2009 10210000000001
03-06-2009 10110000000001
03-05-2009 10310000000001 Forms
但我希望它看起来像这样。
03-06-2009 10610000000001 something
03-06-2009 10210000000001 something
03-06-2009 10110000000001 something
03-05-2009 10310000000001 Forms something
我该怎么做?
答案 0 :(得分:2)
我认为,实现此目的的一种方法是使用一个密钥,该密钥是订单编号和产品类别的概念,以便对不同订单的重复类别进行不同的处理
<xsl:key name="prodcat" match="productcategory" use="concat(../../ordernr/text(), concat('-', text()))"/>
这会连接订单号,连字符(可能不需要)和产品类别。您的XSL可能看起来像这样:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:key name="prodcat" match="productcategory" use="concat(../../ordernr/text(), concat('-', text()))"/>
<xsl:template match="/page/orderhistory">
<xsl:for-each select="order">
<xsl:value-of select="ordernr" />
<xsl:for-each select="orderrecord/productcategory[generate-id(.) = generate-id( key( 'prodcat', concat(../../ordernr/text(), concat('-', text())) )[1] )]">
<xsl:sort select="text()" />
<xsl:value-of select="." />
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出中没有任何换行符或空格,但我希望它能为您提供一般的想法。