I';我试图用XSLT中的两个不同元素进行分组。首先是HOSTLOCID,然后是HOSTVENDORLOCID
下面是我根据之前对本组中其他人的问题的输入创建的XSLTI';我试图用XSLT中的两个不同元素进行分组。首先是HOSTLOCID,然后是HOSTVENDORLOCID,xslt,soa,Xslt,Soa,下面是我根据之前对本组中其他人的问题的输入创建的XSLT <xsl:for-each-group select="/ns0:PurchaseOrders/ns0:PO" group-by="ns0:HOSTLOCID"> <tns:E1PORDCR1> <xsl:for-each-group select="current-group()" group-by="n
<xsl:for-each-group select="/ns0:PurchaseOrders/ns0:PO" group-by="ns0:HOSTLOCID">
<tns:E1PORDCR1>
<xsl:for-each-group select="current-group()" group-by="ns0:HOSTVENDORLOCID">
<tns:E1BPMEPOHEADER>
<tns:COMP_CODE>
<xsl:value-of select="ns0:HOSTLOCID"/>
</tns:COMP_CODE>
<xsl:choose>
<xsl:when test="ns0:ORDERTYPEID = 1">
<tns:DOC_TYPE>NB</tns:DOC_TYPE>
</xsl:when>
<xsl:when test="ns0:ORDERTYPEID = 5">
<tns:DOC_TYPE>ZNB</tns:DOC_TYPE>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="ns0:ORDERTYPEID = 1">
<tns:VENDOR>
<xsl:value-of select="ns0:HOSTVENDORLOCID"/>
</tns:VENDOR>
</xsl:when>
<xsl:when test="ns0:ORDERTYPEID = 5">
<tns:VENDOR>
<xsl:value-of select="ns0:HOSTREPLSOURCELOCID"/>
</tns:VENDOR>
</xsl:when>
</xsl:choose>
</tns:E1BPMEPOHEADER>
</xsl:for-each-group>
</tns:E1PORDCR1>
</xsl:for-each-group>
铌
锌硼
下面是我正在发送的输入
<PurchaseOrders>
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>100</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>200</HOSTPARTID>
<HOSTVENDORLOCID>IC200</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>300</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0002</HOSTLOCID>
<HOSTPARTID>400</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO> <PO>
<HOSTLOCID>100-0003</HOSTLOCID>
<HOSTPARTID>500</HOSTPARTID>
<HOSTVENDORLOCID>IC300</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0002</HOSTLOCID>
<HOSTPARTID>600</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO> <PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>700</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0003</HOSTLOCID>
<HOSTPARTID>800</HOSTPARTID>
<HOSTVENDORLOCID>IC300</HOSTVENDORLOCID>
</PO>
</PurchaseOrders>
100-0001
100
IC100
100-0001
200
IC200
100-0001
300
IC100
100-0002
400
IC100
100-0003
500
IC300
100-0002
600
IC100
100-0001
700
IC100
100-0003
800
IC300
我想要什么作为输出
<PO_Group>
<PurchaseOrders>
<!-- Group by Plant-Loc/Supplier -->
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>100</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>300</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>700</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
</PurchaseOrders>
<PurchaseOrders>
<!-- Group by Plant-Loc/Supplier -->
<PO>
<HOSTLOCID>100-0002</HOSTLOCID>
<HOSTPARTID>400</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0002</HOSTLOCID>
<HOSTPARTID>600</HOSTPARTID>
<HOSTVENDORLOCID>IC100</HOSTVENDORLOCID>
</PO>
</PurchaseOrders>
<PurchaseOrders>
<!-- Group by Plant-Loc/Supplier -->
<PO>
<HOSTLOCID>100-0003</HOSTLOCID>
<HOSTPARTID>500</HOSTPARTID>
<HOSTVENDORLOCID>IC300</HOSTVENDORLOCID>
</PO>
<PO>
<HOSTLOCID>100-0003</HOSTLOCID>
<HOSTPARTID>800</HOSTPARTID>
<HOSTVENDORLOCID>IC300</HOSTVENDORLOCID>
</PO>
</PurchaseOrders>
<PurchaseOrders >
<!-- Group by Plant-Loc/Supplier -->
<PO>
<HOSTLOCID>100-0001</HOSTLOCID>
<HOSTPARTID>200</HOSTPARTID>
<HOSTVENDORLOCID>IC200</HOSTVENDORLOCID>
</PO>
</PurchaseOrders>
<PO_Group>
100-0001
100
IC100
100-0001
300
IC100
100-0001
700
IC100
100-0002
400
IC100
100-0002
600
IC100
100-0003
500
IC300
100-0003
800
IC300
100-0001
200
IC200
我面临的问题是,尽管我能够对元素进行分组,但所有元素都被覆盖,因为我丢失了数据。有什么建议吗
谢谢不清楚为什么要在XSLT中创建结果元素,而这些元素没有显示在想要的输出中;也许你只需要简单地分组、包装和复制每个组
<xsl:template match="/">
<PO_Group>
<xsl:for-each-group select="PurchaseOrders/PO" composite="yes" group-by="HOSTLOCID, HOSTVENDORLOCID">
<PurchaseOrders>
<xsl:apply-templates select="current-group()"/>
</PurchaseOrders>
</xsl:for-each-group>
</PO_Group>
</xsl:template>
谢谢Martin Honnen。你建议的第二个例子对我很有用
<xsl:template match="/">
<PO_Group>
<xsl:for-each-group select="PurchaseOrders/PO" group-by="concat(HOSTLOCID, '|', HOSTVENDORLOCID)">
<PurchaseOrders>
<xsl:apply-templates select="current-group()"/>
</PurchaseOrders>
</xsl:for-each-group>
</PO_Group>
</xsl:template>