2015-11-04 119 views
0

在將xml轉換爲Excel(作爲開放XML)的上下文中,我想按照某些類別進行分組來排列輸出,但將類別名稱顯示爲標題。例如:將xml轉換爲xml(excel)與xslt 2.0:group by

<MYROW> 
    <CATEGORYNAME>first</CATEGORYNAME> 
    <DATA>10</DATA> 
</MYROW> 
<MYROW> 
    <CATEGORYNAME>second</CATEGORYNAME> 
    <DATA>20</DATA> 
</MYROW> 
<MYROW> 
    <CATEGORYNAME>second</CATEGORYNAME> 
    <DATA>30</DATA> 
</MYROW> 
<MYROW> 
    <CATEGORYNAME>first</CATEGORYNAME> 
    <DATA>100</DATA> 
</MYROW> 

應變換分析到:

<ROW> 
    <CELL> 
     <DATA> 
      first 
     </DATA> 
    </CELL> 
</ROW> 
<ROW> 
    <CELL> 
     <DATA> 
      10 
     </DATA> 
    </CELL> 
</ROW> 
<ROW> 
    <CELL> 
     <DATA> 
      100 
     </DATA> 
    </CELL> 
</ROW> 
<ROW> 
    <CELL> 
     <DATA> 
      second 
     </DATA> 
    </CELL> 
</ROW> 
<ROW> 
    <CELL> 
     <DATA> 
      20 
     </DATA> 
    </CELL> 
</ROW> 
<ROW> 
    <CELL> 
     <DATA> 
      30 
     </DATA> 
    </CELL> 
</ROW> 

我試着組通過,過濾器,變量,但不能找到一種方法相同的元素下把(EXCEL排在我的情況)的組按鍵和相關節點。

我正在使用altova mapforce。

+0

爲什麼不發佈你的最佳嘗試,所以我們可以修復它,而不是從頭開始。 –

+0

我使用的是mapforce,生成了xslt並且不太易讀。 – PDM

回答

0

這是一個簡單的分組問題:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 

    <xsl:output indent="yes"/> 

    <xsl:template match="ROOT"> 
     <Worksheet> 
      <xsl:for-each-group select="MYROW" group-by="CATEGORYNAME"> 
       <ROW> 
        <CELL> 
         <DATA> 
          <xsl:value-of select="current-grouping-key()"/> 
         </DATA> 
        </CELL> 
       </ROW> 
       <xsl:apply-templates select="current-group()"/> 
      </xsl:for-each-group> 
     </Worksheet> 
    </xsl:template> 

    <xsl:template match="MYROW"> 
     <ROW> 
      <CELL> 
       <xsl:copy-of select="DATA"/> 
      </CELL> 
     </ROW> 
    </xsl:template> 
</xsl:transform> 

轉換

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT> 
<MYROW> 
    <CATEGORYNAME>first</CATEGORYNAME> 
    <DATA>10</DATA> 
</MYROW> 
<MYROW> 
    <CATEGORYNAME>second</CATEGORYNAME> 
    <DATA>20</DATA> 
</MYROW> 
<MYROW> 
    <CATEGORYNAME>second</CATEGORYNAME> 
    <DATA>30</DATA> 
</MYROW> 
<MYROW> 
    <CATEGORYNAME>first</CATEGORYNAME> 
    <DATA>100</DATA> 
</MYROW> 
</ROOT> 

<?xml version="1.0" encoding="UTF-8"?> 
<Worksheet> 
    <ROW> 
     <CELL> 
     <DATA>first</DATA> 
     </CELL> 
    </ROW> 
    <ROW> 
     <CELL> 
     <DATA>10</DATA> 
     </CELL> 
    </ROW> 
    <ROW> 
     <CELL> 
     <DATA>100</DATA> 
     </CELL> 
    </ROW> 
    <ROW> 
     <CELL> 
     <DATA>second</DATA> 
     </CELL> 
    </ROW> 
    <ROW> 
     <CELL> 
     <DATA>20</DATA> 
     </CELL> 
    </ROW> 
    <ROW> 
     <CELL> 
     <DATA>30</DATA> 
     </CELL> 
    </ROW> 
</Worksheet> 

在線http://xsltransform.net/pPzifp8