Xml 按项值筛选XSLT

Xml 按项值筛选XSLT,xml,xslt,Xml,Xslt,我试图在代码唯一的情况下对项目求和 我有以下XML: 布兰博里10公斤 4 23 19 Česnek 1千克 89 11 10 内德·勒皮布拉姆 SHIPPING140 16 16 ÚterýLiberec SHIPPING122 10 10 如果交货地点是装运地点,我只想合计货物的数量 我使用以下XSLT: 它工作得很好,但我有所有货物的总和。但我只需要金额,如果交货代码是发货122。我尝试通过测试code='SHIPPING107'进行过滤,但它不起作用 首选的XML输出: 布兰博

我试图在代码唯一的情况下对项目求和

我有以下XML:


布兰博里10公斤
4
23
19
Česnek 1千克
89
11
10
内德·勒皮布拉姆
SHIPPING140
16
16
ÚterýLiberec
SHIPPING122
10
10
如果交货地点是装运地点,我只想合计货物的数量

我使用以下XSLT:


它工作得很好,但我有所有货物的总和。但我只需要金额,如果交货代码是发货122。我尝试通过测试
code='SHIPPING107'
进行过滤,但它不起作用

首选的XML输出:


布兰博里10公斤
4
10
Česnek 1千克
89
3.
ÚterýLiberec
SHIPPING122
10
10

交货地点是什么时候?
code='SHIPPING122'
我只想从这个交货地点对Brambory、Česnek等货物进行汇总,而不是从所有订单(所有交货地点)汇总。

我仍然不确定要对哪些数据进行分组和汇总,但要显示一个版本,其中您在谓词中包含了您的条件

<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[CODE = 'SHIPPING122']" use="concat(NAME, CODE)"/>
  <xsl:template match="/ORDERS">
    <xsl:copy> 
      <xsl:apply-templates select="descendant::ITEM[CODE != 'SHIPPING122'] | descendant::ITEM[CODE = 'SHIPPING122'][generate-id() = generate-id(key('itemkey', concat(NAME, CODE))[1])]"/>
    </xsl:copy> 
  </xsl:template>
  <xsl:template match="ITEM[CODE != 'SHIPPING122']">
     <xsl:copy>
         <xsl:copy-of select="CODE | NAME | AMOUNT"/>
     </xsl:copy>
  </xsl:template>
  <xsl:template match="ITEM[CODE = 'SHIPPING122']">
    <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'

我仍然不确定要对哪些数据进行分组和求和,但要显示一个将条件包含在谓词中的版本

<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[CODE = 'SHIPPING122']" use="concat(NAME, CODE)"/>
  <xsl:template match="/ORDERS">
    <xsl:copy> 
      <xsl:apply-templates select="descendant::ITEM[CODE != 'SHIPPING122'] | descendant::ITEM[CODE = 'SHIPPING122'][generate-id() = generate-id(key('itemkey', concat(NAME, CODE))[1])]"/>
    </xsl:copy> 
  </xsl:template>
  <xsl:template match="ITEM[CODE != 'SHIPPING122']">
     <xsl:copy>
         <xsl:copy-of select="CODE | NAME | AMOUNT"/>
     </xsl:copy>
  </xsl:template>
  <xsl:template match="ITEM[CODE = 'SHIPPING122']">
    <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'

如果该代码不是SHIPPING122,您根本不想要任何金额吗?或者,如果代码未发货,您是否希望没有项目结果?考虑显示要输出的结果,如果在XSLT中有一个失败的尝试,那么向我们展示它的尝试,并告诉我们它是如何失败的,无论是哪一个错误,或者输出错误的方式。并非来自所有订单(所有交货地点)。谢谢,所以输入有
10
,输出也有
10
?样本是否显示了您需要且想要分组和求和的任何数据?求和是所有订单的值,仅订单的I nedd值,有
code='SHIPPING122'
Tahnk您是否必须假设您向我们展示的代码片段文件需要包含在一对标记中
,才能成为格式良好的XML文件?如果代码不是SHIPPING122,您是否不想要任何金额?或者,如果代码未发货,您是否希望没有项目结果?考虑显示要输出的结果,如果在XSLT中有一个失败的尝试,那么向我们展示它的尝试,并告诉我们它是如何失败的,无论是哪一个错误,或者输出错误的方式。并非来自所有订单(所有交货地点)。谢谢,所以输入有
10
,输出也有
10
?样本是否显示了您需要且想要分组和求和的任何数据?求和是所有订单的值,仅订单的I nedd值,我们必须假设您向我们展示的代码片段文件需要包含在一对标记中才能成为格式良好的XML文件吗?谢谢您的重播,现在它工作得很好。我只想做一个修改,可以使用
order=“descending”
?谢谢你用这个答案解决原来的问题,然后考虑接受。对于新问题,请提出新问题。感谢您的重播,现在效果很好。我只想做一个修改,可以使用
order=“descending”
?谢谢你用这个答案解决原来的问题,然后考虑接受。对新问题提出新问题。