2017-04-04 59 views
1

我想根據元素「ConsolidatedID」拆分輸入XML並使用XSL變換創建新的輸出XML這可能嗎?使用XSLT拆分輸入XML

如何實現這一目標使用XSLT在SOA12c

輸入XML:

<Root> 
<Data> 
<ConsolidatedID>ONE</ConsolidatedID> 
<NewID>First</NewID> 
<Amount>100</Amount> 
</Data> 
<Data> 
<ConsolidatedID>ONE</ConsolidatedID> 
<NewID>First</NewID> 
<Amount>100</Amount> 
</Data> 
<Data> 
<ConsolidatedID>ONE</ConsolidatedID> 
<NewID>Second</NewID> 
<Amount>200</Amount> 
</Data> 
<Data> 
<ConsolidatedID>TWO</ConsolidatedID> 
<NewID>First</NewID> 
<Amount>100</Amount> 
</Data> 
<Data> 
<ConsolidatedID>TWO</ConsolidatedID> 
<NewID>First</NewID> 
<Amount>100</Amount> 
</Data> 
<ConsolidatedID>TWO</ConsolidatedID> 
<NewID>Four</NewID> 
<Amount>400</Amount> 
</Data> 
</Root> 

O/P預計:

<Root> 
<Data> 
<ConsolidatedID>ONE</ID> 
<NewID>First</NewID> 
<Amount>100</Amount> 
</Data> 
<Data> 
<ConsolidatedID>ONE</ConsolidatedID> 
<NewID>First</NewID> 
<Amount>100</Amount> 
</Data> 
<Data> 
<ConsolidatedID>ONE</ConsolidatedID> 
<NewID>Second</NewID> 
<Amount>200</Amount> 
</Data> 
</Root> 


<Root> 
    <Data> 
    <ConsolidatedID>TWO</ConsolidatedID> 
    <NewID>First</NewID> 
    <Amount>100</Amount> 
    </Data> 
    <Data> 
    <ConsolidatedID>TWO</ConsolidatedID> 
    <NewID>First</NewID> 
    <Amount>100</Amount> 
    </Data> 
    <ConsolidatedID>TWO</ConsolidatedID> 
    <NewID>Four</NewID> 
    <Amount>400</Amount> 
    </Data> 
    </Root> 

可能有人請幫助我解決這個問題?

Regards, Vishnu。

回答

1

在標準的XSLT 2.0(不知道究竟SOA支持),您可以使用

<xsl:template match="Root"> 
    <xsl:for-each-group select="Data" group-by="ConsolidatedID"> 
    <xsl:result-document href="{current-grouping-key()}.xml"> 
     <Root> 
     <xsl:copy-of select="current-group()"/> 
     </Root> 
    </xsl:result-document> 
    </xsl:for-each-group> 
</xsl:template>