2011-09-14 149 views
1

再次出現類似的問題,但現在結果是包含多個孩子。合併具有相同ID且包含所有孩子的節點的孩子

有幫助嗎?

我有這樣的:

<root> 
<rowdata> 
    <ID>1</ID> 
    <pxPages> 
     <rowdata> 
      <comment>comment A</comment> 
      <timestamp>timestamp A</timestamp> 
      <userID>user A</userID> 
     </rowdata> 
    </pxPages> 
</rowdata> 
<rowdata> 
    <ID>2</ID> 
    <pxPages> 
     <rowdata> 
      <comment>comment B</comment> 
      <timestamp>timestamp B</timestamp> 
      <userID>user B</userID> 
     </rowdata> 
    </pxPages> 
</rowdata> 
<rowdata> 
    <ID>2</ID> 
    <pxPages> 
     <rowdata> 
      <comment>comment C</comment> 
      <timestamp>timestamp C</timestamp> 
      <userID>user C</userID> 
     </rowdata> 
    </pxPages> 
</rowdata> 

,並在尋找:

<root> 
<ResultOperationalStatusCategory> 
    <identifier>1</identifier> 
    <comments> 
     <comment>comment A</comment> 
     <timestamp>timestamp A</timestamp> 
     <userID>user A</userID> 
    </comments> 
</ResultOperationalStatusCategory> 
<ResultOperationalStatusCategory> 
    <identifier>2</identifier> 
    <comments> 
     <comment>comment B</comment> 
     <timestamp>timestamp B</timestamp> 
     <userID>user B</userID> 
    </comments> 
    <comments> 
     <comment>comment C</comment> 
     <timestamp>timestamp C</timestamp> 
     <userID>user C</userID> 
    </comments> 
</ResultOperationalStatusCategory> 

所以,結果是每唯一標識符,但包含所有的意見。

謝謝!

+0

這個回答可以幫助您:http://stackoverflow.com/questions/7405578/merge-multiple-nodes-with-same-id-into-one-but-append-all-childs/7406229# 7406229?如果是這樣,接受它作爲答案。 –

+0

它只適用於同一級別(所給示例略有不同),我不能使用複製... – joan

+0

我已經提供了當前問題的答案。 –

回答

0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes" indent="yes"/> 

    <xsl:key name="k" match="root/rowdata" use="ID"/> 

    <xsl:template match="/root"> 
     <xsl:copy> 
      <xsl:apply-templates select="rowdata[generate-id(.) = 
          generate-id(key('k', ID))]"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="rowdata"> 
     <ResultOperationalStatusCategory> 
      <identifier> 
       <xsl:value-of select="ID"/> 
      </identifier> 

      <xsl:apply-templates select="key('k', ID)/pxPages/rowdata"/> 

     </ResultOperationalStatusCategory> 
    </xsl:template> 

    <xsl:template match="pxPages/rowdata"> 
     <comments> 
      <xsl:apply-templates select="*"/> 
     </comments> 
    </xsl:template> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 
相關問題