2012-02-13 8 views
2

ソースXMLから現在のデータとmulitple値に基づいて作成したXMLにXMLを変換:は、レコードが要素リスト

<record> 
     <protein>AAA</protein> 
     <reference>1234</reference> 
     <reference>679</reference> 
    </record> 
    <record> 
     <protein>BBB</protein> 
     <reference>9876</reference> 
    </record> 
    <record> 
     <protein>CCC</protein> 
     <reference>9876</reference> 
     <reference>14846</reference> 
     <reference>982</reference> 
    </record> 

私はXLSTを使用しての新しいですし、私の問題への解決策を見つけることができませんでした。レコードのデータがリスト内の値に基づいて1つ以上の新しいレコードに分割されるXMLファイルを特に作成する必要があります。リスト(参照)の値の数は非常に可変であることに注意してください。

理想のXML:

<record> 
     <protein>AAA</protein> 
     <reference>1234</reference> 
    </record> 
    <record> 
     <protein>AAA</protein> 
     <reference>679</reference> 
    </record> 
    <record> 
     <protein>BBB</protein> 
     <reference>9876</reference> 
    </record> 
    <record> 
     <protein>CCC</protein> 
     <reference>9876</reference> 
    </record> 
    <record> 
     <protein>CCC</protein> 
     <reference>14846</reference> 
    </record> 
    <record> 
     <protein>CCC</protein> 
     <reference>982</reference> 
    </record> 

すべてのヘルプははるかに高く評価されます。

+0

あなたはこの質問に対する私の答えで「破砕問題」への一般的な解決策を見てみたいことがあります。 com/a/8597577/36305 –

答えて

1

サンプルXML入力ファイルを調整する必要があります。

<?xml version="1.0" encoding="UTF-8"?> 
<records> 
<record> 
     <protein>AAA</protein> 
     <reference>1234</reference> 
     <reference>679</reference> 
</record> 
<record> 
     <protein>BBB</protein> 
     <reference>9876</reference> 
</record> 
<record> 
     <protein>CCC</protein> 
     <reference>9876</reference> 
     <reference>14846</reference> 
     <reference>982</reference> 
</record> 
</records> 

その後、XSL自体は次のようになります。http:// stackoverflowの

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
<xsl:output exclude-result-prefixes="xsl xs" indent="yes"/> 
<xsl:template match="/records/record"> 
    <xsl:for-each select="reference"> 
     <xsl:element name="record"> 
      <xsl:element name="protein"> 
       <xsl:value-of select="../protein/text()"/> 
      </xsl:element> 
      <xsl:element name="reference"> 
       <xsl:value-of select="text()"/> 
      </xsl:element> 
     </xsl:element> 
    </xsl:for-each> 
</xsl:template> 
</xsl:stylesheet>