我在尝试使用xml对元素数量进行排序时遇到错误:
SQL> create table x (id) as select 1 from dual union all select 1 from dual;
Table created.
Elapsed: 00:00:00.01
SQL> select * from x;
ID
----------
1
1
2 rows selected.
Elapsed: 00:00:00.08
SQL> select id
2 ,CASE WHEN COUNT(id ) > 1 THEN 'X'
3 ELSE ' ' END AS Dual
4 from x
5 group by id
6 /
ID DUAL
---------- ----
1 X
1 row selected.
Elapsed: 00:00:00.13
我希望看到每个产品的“oferta”数量按产品的“oferta”数量排序,我正在使用以下xls进行操作:
<segma>
<conservacio>
<cons estat="A">Excel·lent conservació</cons>
<cons estat="B">Bona conservació</cons>
<cons estat="C">Regular conservació</cons>
<cons estat="D">Mala conservació</cons>
</conservacio>
<categories>
<categoria cat="1">Mobiliari</categoria>
<categoria cat="2">Alimentació</categoria>
<categoria cat="3">Roba</categoria>
</categories>
<clients>
<registre dni="111">Marti</registre>
<registre dni="222">Jana</registre>
<registre dni="333">Edu</registre>
<registre dni="444">Santi</registre>
<registre dni="555">Mia</registre>
<registre dni="666">Pau M</registre>
</clients>
<productes>
<prod id="1" cons="A" cat="1">
<nom>Cuna</nom>
<preu_nou>70</preu_nou>
<preu>30</preu>
<ofertes>
<oferta client="111" />
<oferta client="333" />
</ofertes>
<venta client="111" />
</prod>
<prod id="2" cons="B" cat="2">
<nom>Baby cook</nom>
<preu_nou>120</preu_nou>
<preu>60</preu>
<ofertes>
<oferta client="111" />
<oferta client="333" />
<oferta client="444" />
<oferta client="555" />
</ofertes>
<venta client="555" />
</prod>
<prod id="3" cons="A" cat="1">
<nom>Mama pata</nom>
<preu_nou>70</preu_nou>
<preu>5</preu>
<ofertes>
<oferta client="444" />
<oferta client="555" />
</ofertes>
<venta client="444" />
</prod>
<prod id="4" cons="B" cat="3">
<nom>Conjunt xandall</nom>
<preu_nou>40</preu_nou>
<preu>15</preu>
<ofertes>
<oferta client="222" />
<oferta client="555" />
</ofertes>
<venta client="222" />
</prod>
<prod id="5" cons="C" cat="3">
<nom>Pack 3 texans</nom>
<preu_nou>70</preu_nou>
<preu>25</preu>
<ofertes>
<oferta client="333" />
<oferta client="444" />
<oferta client="555" />
</ofertes>
<venta client="333" />
</prod>
<prod id="6" cons="A" cat="2">
<nom>Saca leches</nom>
<preu_nou>130</preu_nou>
<preu>70</preu>
<ofertes>
<oferta client="111" />
<oferta client="222" />
<oferta client="555" />
</ofertes>
<venta client="111" />
</prod>
<prod id="7" cons="C" cat="2">
<nom>Llet continuació</nom>
<preu_nou>11</preu_nou>
<preu>3</preu>
<ofertes>
</ofertes>
</prod>
</productes>
</segma>
我想要输出如下:
<h2>Ex 7</h2>
<table border="1">
<xsl:for-each select="//prod">
<xsl:variable name="producte" select="@id"/>
<xsl:variable name="contador" select="count(//prod[@id=$producte]/ofertes/oferta)"/>
<xsl:sort select="$contador"/>
<tr>
<td>
<xsl:value-of select="nom"/>
</td>
<td>
<xsl:value-of select="$contador"/>
</td>
</tr>
</xsl:for-each>
</table>
有人能告诉我为什么我遇到麻烦吗?
答案 0 :(得分:1)
由于foreach中的上下文是prod
元素,因此您只需执行count(ofertes/oferta)
即可从当前上下文prod
获取计数。您似乎也想要降序订单中的结果:
<table border="1">
<xsl:for-each select="//prod">
<xsl:sort select="count(ofertes/oferta)" order="descending" />
<tr>
<td>
<xsl:value-of select="nom"/>
</td>
<td>
<xsl:value-of select="count(ofertes/oferta)"/>
</td>
</tr>
</xsl:for-each>
</table>