根据xsl 1.0中的条件进行分组

时间:2019-02-01 11:47:14

标签: xslt-1.0

我需要基于OperationID进行分组,然后再次基于OperationID中的COMBINATION_CODE进行分组。但是COMBINATION_CODE可能也有空标记。仅当值在COMBINATION_CODE中存在时,以下样式表才按预期将COMBINATION_CODE分组。如果存在空标记,则与OperationID无关,它将所有空COMBINATION_CODE记录分组在一起。请找到示例输入:

<root>
   <records>
        <record>
             <OperationID>13</OperationID>
             <COMBINATION_CODE>c</COMBINATION_CODE>
             <GroupID>00</GroupID>
             <UTC_TIME>2018-12-06</UTC_TIME>
             <ID>123456789</ID>
             <DocumentID>ShowOperationCode20181206071249</DocumentID>
             <AllGroupID>JTH</AllGroupID>
             <AllID>B21B1</AllID>
        </record>
        <record>
             <OperationID>13</OperationID>
             <COMBINATION_CODE>c</COMBINATION_CODE>
             <GroupID>00</GroupID>
             <UTC_TIME>2018-12-06</UTC_TIME>
             <ID>123456789</ID>
             <DocumentID>ShowOperationCode20181206071249</DocumentID>
             <AllGroupID>JTT</AllGroupID>
             <AllID>B21FB</AllID>
        </record>
        <record>
             <OperationID>13</OperationID>
             <COMBINATION_CODE/>
             <GroupID>00</GroupID>
             <UTC_TIME>2018-12-06</UTC_TIME>
             <ID>123456789</ID>
             <DocumentID>ShowOperationCode20181206071249</DocumentID>
             <AllGroupID>JTT</AllGroupID>
             <AllID>B21FC</AllID>
        </record>       
        <record>
             <OperationID>14</OperationID>
             <COMBINATION_CODE/>
             <GroupID>01</GroupID>
             <UTC_TIME>2018-12-06</UTC_TIME>
             <ID>123456788</ID>
             <DocumentID>ShowOperationCode20181206071250</DocumentID>
             <AllGroupID>KTH</AllGroupID>
             <AllID>BFFHT</AllID>
        </record>
    </records>
</root>

预期输出:

<?xml version="1.0" encoding="iso-8859-1"?>
<Show releaseID="5.4.4" xmlns:star="http://www.starstandard.org/STAR/5">
        <DataArea>
            <LOperations>
                <LOperationsDetail>
                        <LOperationID>13</LOperationID>
                        <Combinations>
                        <combinationCode>c</combinationCode><!-- combinationCode is grouped and each record is present inside VLaborAllowance -->
                        <VLaborAllowance  xmlns:star="http://www.starstandard.org/STAR/5" >
                                <VIGroup>
                                    <GID>JTH</GID>
                                    <VID>B21B1</VID>
                                </VIGroup>
                        </VLaborAllowance>
                        <VLaborAllowance  xmlns:star="http://www.starstandard.org/STAR/5" >
                                <VIGroup>
                                    <GID>JTT</GID>
                                    <VID>B21FB</VID>
                                </VIGroup>
                        </VLaborAllowance>
                        </Combinations>
                        <Combinations>
                        <combinationCode/><!--empty tag should present in separate combination-->
                        <VLaborAllowance  xmlns:star="http://www.starstandard.org/STAR/5" >
                                <VIGroup>
                                    <GID>JTT</GID>
                                    <VID>B21FC</VID>
                                </VIGroup>
                            </VLaborAllowance>
                        </Combinations>
                    </LOperationsDetail>
                    <LOperationsDetail>
                        <LOperationID>KTH</LOperationID>
                        <Combinations>
                        <combinationCode/>
                        <VLaborAllowance  xmlns:star="http://www.starstandard.org/STAR/5" >
                                <VIGroup>
                                    <GID>KTH</GID>
                                    <VID>BFFHT</VID>
                                </VIGroup>
                            </VLaborAllowance>
                        </Combinations>
                    </LOperationsDetail>
            </star:LOperations>
        </star:DataArea>
    </star:Show>

使用的样式表:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
    <xsl:strip-space elements="*"/>
    <xsl:key name="opcode" match="record" use="OperationID" />
    <xsl:key name="combination" match="record" use="COMBINATION_CODE" />    
    <xsl:template match="root/records">
    <Show releaseID="5.4.4" xmlns:star="http://www.starstandard.org/STAR/5">
        <DataArea>
            <LOperations>
                <xsl:for-each select="record[count(. | key('opcode', OperationID)[1]) = 1]" >          
                    <LOperationsDetail>
                        <LOperationID><xsl:value-of select="OperationID"/></LOperationID>
                        <xsl:for-each select="key('opcode',OperationID)[count(. | key('combination', COMBINATION_CODE)[1]) = 1]" >
                        <Combinations>
                            <combinationCode><xsl:value-of select="COMBINATION_CODE"/></combinationCode>
                            <xsl:for-each select="key('combination', COMBINATION_CODE)">
                            <VLaborAllowance  xmlns:star="http://www.starstandard.org/STAR/5" >
                                <VIGroup>
                                    <GID><xsl:value-of select="AllGroupID" /></GID>
                                    <VID><xsl:value-of select="AllID" /></VID>
                                </VIGroup>
                            </VLaborAllowance>
                            </xsl:for-each>
                        </Combinations>
                        </xsl:for-each>
                    </LOperationsDetail>
                </xsl:for-each>
            </LOperations>
        </DataArea>
    </Show>
    </xsl:template>
</xsl:stylesheet>

当前输出:

<?xml version="1.0" encoding="UTF-8"?>
<Show xmlns:star="http://www.starstandard.org/STAR/5" releaseID="5.4.4">
  <DataArea>
    <LOperations>
      <LOperationsDetail>
        <LOperationID>13</LOperationID>
        <Combinations>
          <combinationCode>c</combinationCode>
          <VLaborAllowance>
            <VIGroup>
              <GID>JTH</GID>
              <VID>B21B1</VID>
            </VIGroup>
          </VLaborAllowance>
          <VLaborAllowance>
            <VIGroup>
              <GID>JTT</GID>
              <VID>B21FB</VID>
            </VIGroup>
          </VLaborAllowance>
        </Combinations>
        <Combinations>
          <combinationCode/>
          <VLaborAllowance>
            <VIGroup>
              <GID>JTT</GID>
              <VID>B21FC</VID>
            </VIGroup>
          </VLaborAllowance>
          <VLaborAllowance>
            <VIGroup>
              <GID>KTH</GID>
              <VID>BFFHT</VID>
            </VIGroup>
          </VLaborAllowance>
        </Combinations>
      </LOperationsDetail>
      <LOperationsDetail>
        <LOperationID>14</LOperationID>
      </LOperationsDetail>
    </LOperations>
  </DataArea>
</Show>

1 个答案:

答案 0 :(得分:0)

要在基于import numpy as np from sklearn.decomposition import PCA X = np.random.randn(2735, 219) pca = PCA(n_components=30) pca.fit(X) test_values = np.random.randn(395 , 219) pca.transform(test_values) 的当前组中创建基于COMBINATION_CODE的子组,您必须在子组的键定义中包括OperationID

OperationID

以及调用键时:

XSLT 1.0

<xsl:key name="combination" match="record" use="concat(COMBINATION_CODE, '|', OperationID)" />   
相关问题