2017-08-16 9 views
0

私はこの質問はXSLT-gurusのためにここではかなり簡単だと思います。XML内の各行の開始に基づくXSLT 1.0グループ化

Iは、入力XML以下を有する:私は私は、各ループを使用して反復することができるようにグループ行要素にできるようにしたい

<?xml version="1.0" encoding="utf-8"?> 
<rows xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <row>72906505066990543065 ABCDEF</row> 
    <row>72916505066990608306 ABCDEF</row> 
    <row>72916505066990665660 EFGHIJ</row> 
    <row>72916505066990665660 EFGHIJ</row> 
    <row>72916505066990684364 KLMNOP</row> 
    <row>72916505066990684364 KLMNOP</row> 
    <row>72916505066990684364 KLMNOP</row> 
    <row>72916505066990722859 QRSTUV</row> 
    <row>72916505066990722859 QRSTUV</row> 
</rows> 

を。グループ化は、各行の最初の20の数字に基づいて行う必要があります。

誰かがこれを実現するハウツーに助けてくれますか?

出力XMLは次のようになります。

<?xml version="1.0" encoding="UTF-8"?> 
<RowsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<RowList> 
    <Row> 
    <LineID> 
     <Identity>72906505066990543065</Identity> 
    </LineID> 
    <RowData> 
      <Data>ABCDEF<Data/> 
    </RowData> 
    </Row> 
    <Row> 
    <LineID> 
     <Identity>72916505066990608306</Identity> 
    </LineID> 
    <RowData> 
      <Data>ABCDEF<Data/> 
    </RowData> 
    </Row> 
    <Row> 
    <LineID> 
     <Identity>72916505066990665660</Identity> 
    </LineID> 
    <RowData> 
      <Data>EFGHIJ<Data/> 
    </RowData> 
    <RowData> 
      <Data>EFGHIJ<Data/> 
    </RowData> 
    </Row> 
</RowList> 
</RowsFile> And so on.... 
+2

ここにスタートします。http: //www.jenitennison.com/xslt/grouping/muenchian.h tmlあなたのグループ化キーとして、 ''を使います。 –

答えて

2

は非常にマイケルをありがとう! あなたは正しい方向に私を指差しました。最後に

私はこのように私の問題を解決しました:

入力XML:

<?xml version="1.0" encoding="utf-8"?> 
<rows xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<row>72906505066990543065 ABCDEF</row> 
<row>72916505066990608306 ABCDEF</row> 
<row>72916505066990665660 EFGHIJ</row> 
<row>72916505066990665660 EFGHIJ</row> 
<row>72916505066990684364 KLMNOP</row> 
<row>72916505066990684364 KLMNOP</row> 
<row>72916505066990684364 KLMNOP</row> 
<row>72916505066990722859 QRSTUV</row> 
<row>72916505066990722859 QRSTUV</row> 
</rows> 

XSLT:

<?xml version = "1.0" encoding = "UTF-8"?> 
<xsl:transform version = "1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:key name="Collection" match="row" use="substring(., 1, 20)" />     

    <xsl:template match="rows"> 
     <RowsFile> 
      <RowList> 
      <!-- Loop all unique groups --> 
      <xsl:for-each select="row[count(. | key('Collection', substring(., 1, 20))[1]) = 1]"> 
       <Grouped> 
        <Data> 
          <xsl:value-of select="normalize-space(substring(.,1,20))"/> 
        </Data> 

       <!-- Loop all values in group--> 
       <xsl:for-each select="key('Collection', substring(., 1, 20))"> 
        <Value> 
         <Data><xsl:value-of select="normalize-space(substring(.,25,6))"/></Data> 
        </Value> 
       </xsl:for-each> 

       </Grouped> 

      </xsl:for-each> 
      </RowList> 
     </RowsFile> 
    </xsl:template> 

</xsl:transform> 

出力:

<?xml version="1.0" encoding="UTF-8"?> 
<RowsFile xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <RowList> 
    <Grouped> 
     <Data>72906505066990543065</Data> 
     <Value> 
     <Data>ABCDEF</Data> 
     </Value> 
    </Grouped> 
    <Grouped> 
     <Data>72916505066990608306</Data> 
     <Value> 
     <Data>ABCDEF</Data> 
     </Value> 
    </Grouped> 
    <Grouped> 
     <Data>72916505066990665660</Data> 
     <Value> 
     <Data>EFGHIJ</Data> 
     </Value> 
     <Value> 
     <Data>EFGHIJ</Data> 
     </Value> 
    </Grouped> 
    <Grouped> 
     <Data>72916505066990684364</Data> 
     <Value> 
     <Data>KLMNOP</Data> 
     </Value> 
     <Value> 
     <Data>KLMNOP</Data> 
     </Value> 
     <Value> 
     <Data>KLMNOP</Data> 
     </Value> 
    </Grouped> 
    <Grouped> 
     <Data>72916505066990722859</Data> 
     <Value> 
     <Data>QRSTUV</Data> 
     </Value> 
     <Value> 
     <Data>QRSTUV</Data> 
     </Value> 
    </Grouped> 
    </RowList> 
</RowsFile> 
関連する問題