Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我试图用XSLT中的两个不同元素进行分组。首先是HOSTLOCID,然后是HOSTVENDORLOCID_Xslt_Soa - Fatal编程技术网

I';我试图用XSLT中的两个不同元素进行分组。首先是HOSTLOCID,然后是HOSTVENDORLOCID

I';我试图用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

下面是我根据之前对本组中其他人的问题的输入创建的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="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>