2015-11-30 34 views
1

基於唯一字段合併單個xml元素中的重複xml元素我有一個場景,我需要根據唯一字段將XML元素合併到單個根元素中。如何使用xslt

請求:

 <?xml version = "1.0" encoding = "UTF-8"?> 
<ns0:klanten xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0"> 
    <ns0:klant xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0"> 
     <ns0:klantId MVS = "36301586">36301586</ns0:klantId> 
     <ns0:accounts> 
      <ns0:account> 
       <ns0:accountVolgnummer>3</ns0:accountVolgnummer> 
       <ns0:betaalwijze>AGI</ns0:betaalwijze> 
       <ns0:classificatie>B2C</ns0:classificatie> 
       <ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium> 
       <ns0:bankrekening> 
        <ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer> 
        <ns0:bankrekeninghouder/> 
        <ns0:bankrekeningland/> 
        <ns0:financieleInstelling/> 
        <ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator> 
       </ns0:bankrekening> 
       <ns0:startdatum>2014-06-05</ns0:startdatum> 
       <ns0:einddatum>2014-07-25</ns0:einddatum> 
       </ns0:account> 
     </ns0:accounts> 
    </ns0:klant> 
    <ns0:klant xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0"> 
     <ns0:klantId MVS = "36301586">36301586</ns0:klantId> 
     <ns0:accounts> 
      <ns0:account> 
       <ns0:accountVolgnummer>464</ns0:accountVolgnummer> 
       <ns0:betaalwijze>AGI</ns0:betaalwijze> 
       <ns0:classificatie>B2C</ns0:classificatie> 
       <ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium> 
       <ns0:bankrekening> 
        <ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer> 
        <ns0:bankrekeninghouder/> 
        <ns0:bankrekeningland/> 
        <ns0:financieleInstelling/> 
        <ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator> 
       </ns0:bankrekening> 
       <ns0:startdatum>2014-12-12</ns0:startdatum> 
       <ns0:einddatum>2015-03-09</ns0:einddatum>   
      </ns0:account> 
     </ns0:accounts> 
    </ns0:klant> 
</ns0:klanten> 

所需的輸出:

<?xml version = "1.0" encoding = "UTF-8"?> 
<ns0:klanten xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0"> 
<ns0:klant xmlns:ns0 = "http://integratie.com/typen/klant/klantmvs/1.0"> 
     <ns0:klantId MVS = "36301586">36301586</ns0:klantId> 
     <ns0:accounts> 
      <ns0:account> 
       <ns0:accountVolgnummer>464</ns0:accountVolgnummer> 
       <ns0:betaalwijze>AGI</ns0:betaalwijze> 
       <ns0:classificatie>B2C</ns0:classificatie> 
       <ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium> 
       <ns0:bankrekening> 
        <ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer> 
        <ns0:bankrekeninghouder/> 
        <ns0:bankrekeningland/> 
        <ns0:financieleInstelling/> 
        <ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator> 
       </ns0:bankrekening> 
       <ns0:startdatum>2014-12-12</ns0:startdatum> 
       <ns0:einddatum>2015-03-09</ns0:einddatum> 
      </ns0:account> 
      <ns0:account> 
       <ns0:accountVolgnummer>3</ns0:accountVolgnummer> 
       <ns0:betaalwijze>AGI</ns0:betaalwijze> 
       <ns0:classificatie>B2C</ns0:classificatie> 
       <ns0:gewensteNotaMedium>VZD</ns0:gewensteNotaMedium> 
       <ns0:bankrekening> 
        <ns0:bankrekeningnummer>BNGH0285108743</ns0:bankrekeningnummer> 
        <ns0:bankrekeninghouder/> 
        <ns0:bankrekeningland/> 
        <ns0:financieleInstelling/> 
        <ns0:standaardrekeningIndicator>true</ns0:standaardrekeningIndicator> 
       </ns0:bankrekening> 
       <ns0:startdatum>2014-06-05</ns0:startdatum> 
       <ns0:einddatum>2014-07-25</ns0:einddatum> 
       </ns0:account> 
     </ns0:accounts> 
    </ns0:klant> 
</ns0:klanten> 

我想在TIBCO來實現這一點,但沒有成功。任何人都可以幫我寫xslt嗎?

+0

你好,我是好奇。因爲我現在正在學習XSLT,所以如果我的答案可以解決您的問題? – Shnugo

回答

2

您可能會嘗試這樣:使用密鑰獲取不同的ID並使用這些不同的ID遍歷klantId節點。選擇他們的帳戶數據。

我敢肯定有周圍的人誰可以解決這個問題有一半的線的人,但似乎準備你需要什麼:

這裏測試:http://www.utilities-online.info/xsltransformation/#.VlzGqNgveUl

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" 
    version="1.0" xmlns:ns0="http://integratie.com/typen/klant/klantmvs/1.0"> 
    <xsl:output encoding="UTF-8" indent="yes" method="xml" standalone="no" omit-xml-declaration="no" /> 

    <xsl:key name="IDs" match="/ns0:klanten/ns0:klant/ns0:klantId" use="@MVS" /> 

    <xsl:template match="/"> 
     <ns0:klanten> 
      <xsl:for-each select="//ns0:klantId[generate-id()=generate-id(key('IDs',.)[1])]"> 
       <xsl:variable name="currentId" select="." /> 
       <ns0:klant> 
        <ns0:klantid mvs="{$currentId}"> 
         <xsl:value-of select="$currentId" /> 
        </ns0:klantid> 
        <ns0:accounts> 
         <xsl:for-each select="//ns0:klantId[@MVS=$currentId]"> 
          <xsl:copy-of select="../ns0:accounts/ns0:account" /> 
         </xsl:for-each> 
        </ns0:accounts> 
       </ns0:klant> 
      </xsl:for-each> 
     </ns0:klanten> 
    </xsl:template> 
</xsl:stylesheet> 
+0

感謝您的回覆。你的解決方案有效,但我已經在Tibco BW中完成了它。 :) –