2016-12-04 130 views
0

我想要使用多個頭,細節和瀏覽更詳細信息的節點將XML。每個節點都包含關鍵的「ID」以將它們連接在一起。
這似乎很簡單,但它不適合我。XSLT基的基於ID值子

開始與下面的XML:

<?xml version="1.0" encoding="UTF-8"?> 
<File> 
    <Header> 
     <Id>1</Id> 
     <Other>How</Other> 
    </Header> 
    <Detail> 
     <Id>1</Id> 
     <Other>to</Other> 
    </Detail> 
    <MoreDetails> 
     <Id>1</Id> 
     <Other>group</Other> 
    </MoreDetails> 
    <Header> 
     <Id>2</Id> 
     <Other>How</Other> 
    </Header> 
    <Detail> 
     <Id>2</Id> 
     <Other>to</Other> 
    </Detail> 
    <MoreDetails> 
     <Id>2</Id> 
     <Other>group</Other> 
    </MoreDetails> 
    <MoreDetails> 
     <Id>2</Id> 
     <Other>may have multiples</Other> 
    </MoreDetails> 
</File> 

生成類似以下或者與組1,組2等,或組值= 1,組值= 2等

<?xml version="1.0" encoding="UTF-8"?> 
<File> 
    <Group value="1"> 
     <Header> 
      <Id>1</Id> 
      <Other>How</Other> 
     </Header> 
     <Detail> 
      <Id>1</Id> 
      <Other>to</Other> 
     </Detail> 
     <MoreDetails> 
      <Id>1</Id> 
      <Other>group</Other> 
     </MoreDetails> 
    </Group> 
    <Group value="2"> 
     <Header> 
      <Id>2</Id> 
      <Other>How</Other> 
     </Header> 
     <Detail> 
      <Id>2</Id> 
      <Other>to</Other> 
     </Detail> 
     <MoreDetails> 
      <Id>2</Id> 
      <Other>group</Other> 
     </MoreDetails> 
     <MoreDetails> 
      <Id>2</Id> 
      <Other>with multiple child</Other> 
     </MoreDetails> 
    </Group> 
</File> 

我開始與這樣的事情,

<xsl:template match="/File"> 

     <xsl:for-each-group select="./child::*" group-by="Id"> 
      <xsl:variable name="ID" select="Id"/> 
      <xsl:value-of select="current-grouping-key()"/> 

和變化使用變量和鍵名稱,但我不是能夠按照指定輸出。

任何想法非常歡迎。 在此先感謝 -ac

回答

2

您需要使用current-group()訪問組中的節點。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 

    <xsl:output indent="yes"/> 

    <xsl:template match="/File"> 
    <File> 
     <xsl:for-each-group select="./child::*" group-by="Id"> 
     <Group value="{Id}"> 
      <xsl:copy-of select="current-group()"/> 
     </Group> 
     </xsl:for-each-group> 
    </File> 
    </xsl:template> 
</xsl:stylesheet> 
+0

這偉大工程。我最近的是這個(下面),但最後一個節點沒有正確形成。感謝您的完美解決方案。 – user1375987

+0

啊,不能發佈我的XSL ..你是無論如何更好。再次感謝。 – user1375987