XSLT-фильтрация по значению элемента - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь суммировать элементы, только если код уникален.

У меня есть XML:

<ITEM>
    <NAME>Brambory 10 kg</NAME>
    <CODE>4</CODE>
    <AMOUNT>23</AMOUNT>
    <COUNT>19</COUNT>
</ITEM>
<ITEM>
    <NAME>Česnek 1 kg</NAME>
    <CODE>89</CODE>
    <AMOUNT>11</AMOUNT>
    <COUNT>10</COUNT>
</ITEM>
<ITEM>
    <NAME>Neděle - Příbram</NAME>
    <CODE>SHIPPING140</CODE>
    <AMOUNT>16</AMOUNT>
    <COUNT>16</COUNT>
</ITEM>
<ITEM>
    <NAME>Úterý - Liberec</NAME>
    <CODE>SHIPPING122</CODE>
    <AMOUNT>10</AMOUNT>
    <COUNT>10</COUNT>
</ITEM>

Суммирую только количество товаров, если место доставки SHIPPING122.

Я использую этот XSLT:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="xml" omit-xml-declaration="no" indent="yes"/>
 <xsl:strip-space elements="*"/>
  <xsl:key name="itemkey" match="ITEM" use="concat(NAME, CODE)"/>
<xsl:template match="/ORDERS">
  <xsl:copy> 
      <xsl:apply-templates select="descendant::ITEM[generate-id() = generate-id(key('itemkey', concat(NAME, CODE))[1])]"/>
    </xsl:copy> 
  </xsl:template>
  <xsl:template match="ITEM">   
    <xsl:copy>      
        <xsl:variable name="curr-group" select="key('itemkey', concat(NAME, CODE))" />  
       <xsl:copy-of select="CODE|NAME"/>        
        <AMOUNT>         
            <xsl:value-of select="sum($curr-group/AMOUNT)"/>        
        </AMOUNT>       
    </xsl:copy>         
  </xsl:template>
</xsl:stylesheet>

Он отлично работает, но у меня есть сумма всех товаров. Но мне нужна сумма, только если КОД доставки SHIPPING122. Пытаюсь отфильтровать по тесту CODE = 'SHIPPING107', но не работает.

Предпочтительный XML вывод:

<ITEM>
    <NAME>Brambory 10 kg</NAME>
    <CODE>4</CODE>
    <AMOUNT>10</AMOUNT>
</ITEM>
<ITEM>
    <NAME>Česnek 1 kg</NAME>
    <CODE>89</CODE>
    <AMOUNT>3</AMOUNT>
</ITEM>
<ITEM>
    <NAME>Úterý - Liberec</NAME>
    <CODE>SHIPPING122</CODE>
    <AMOUNT>10</AMOUNT>
    <COUNT>10</COUNT>
</ITEM>

Когда место доставки с CODE = 'SHIPPING122' Я хотел бы суммировать товары Брамбори, Чеснек и др. c. только с этого места доставки, а не со всех заказов (все места доставки).

1 Ответ

0 голосов
/ 10 мая 2020
• 1000 с теми же NAME и CODE, где CODE - 'SHIPPING122'.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...