2016-04-28 27 views
0

友だち、XSLTを使用して、複数の入力xmlから読み込んで処理することによって出力xmlファイルを生成する方法

私はXSLTを初めて使用しています。以下の論理を得るのを助けてください。私は、以下の3つの入力XMLファイルからUNIXマシン

を使用しています、XSLTを使用して「数」フィールド値を追加し、カウント・フィールドに付加価値を持つ出力を生成する必要がありますする必要が

Input XML 1 

<topic> 
<topicName>Billing</topicName> 
<property> 
<make>HONDA</make> 
<Model>ACCORD</Model> 
</property> 
<count>10</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>TOYOTO</make> 
<Model>CAMRY</Model> 
</property> 
<count>20</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>NISSAN</make> 
<Model>ALTIMA</Model> 
</property> 
<count>30</count> 
</topic> 

入力XML 2

<topic> 
<topicName>Billing</topicName> 
<property> 
<make>HONDA</make> 
<Model>ACCORD</Model> 
</property> 
<count>100</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>TOYOTO</make> 
<Model>CAMRY</Model> 
</property> 
<count>200</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>NISSAN</make> 
<Model>ALTIMA</Model> 
</property> 
<count>300</count> 
</topic> 

入力XML 3

<topic> 
<topicName>Billing</topicName> 
<property> 
<make>HONDA</make> 
<Model>ACCORD</Model> 
</property> 
<count>1000</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>TOYOTO</make> 
<Model>CAMRY</Model> 
</property> 
<count>2000</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>NISSAN</make> 
<Model>ALTIMA</Model> 
</property> 
<count>3000</count> 
</topic> 

上記3入力XMLファイルから、追加する必要がありますXSLTを使用して値をカウントし、カウント・フィールドのために付加価値を持つ出力を生成する必要が

OUTPUTのXML:(1.1用)

<topic> 
<topicName>Billing</topicName> 
<property> 
<make>HONDA</make> 
<Model>ACCORD</Model> 
</property> 
<count>1110</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>TOYOTO</make> 
<Model>CAMRY</Model> 
</property> 
<count>2220</count> 
</topic> 
<topic> 
<topicName>Billing</topicName> 
<property> 
<make>NISSAN</make> 
<Model>ALTIMA</Model> 
</property> 
<count>3330</count> 
</topic> 

document()機能にまで読むアドバンス

+0

'make'と' Model'によってグループ化される異なるファイルの 'topic'をどのように特定しますか? –

答えて

1

のおかげで、とdoc()機能。

1.1では、xsl:for-each-groupdeep-equal()を読んでください。

1.0と1.1の両方で、sum()を読んでください。

0

あなたは、コレクション使用してファイルを読み込むことができます(サンプルで使用される構文を特定サクソン9):-it:mainを使用して

<?xml version="1.0" encoding="UTF-8"?> 
<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:param name="file-pattern" select="'topic*.xml'"/> 

    <xsl:template name="main"> 
     <xsl:for-each-group select="collection(concat('.?select=', $file-pattern))//topic" group-by="concat(property/make, '|', property/Model)"> 
      <xsl:copy> 
       <xsl:copy-of select="topicName, property"/> 
       <count> 
        <xsl:value-of select="sum(current-group()/count)"/> 
       </count> 
      </xsl:copy> 
     </xsl:for-each-group> 
    </xsl:template> 

</xsl:stylesheet> 

実行サクソン9はmainと呼ばれるそのテンプレートを開始します。

+0

あなたのご意見ありがとうございます。 xsltを実行中にこのエラーが発生しました.... "javax.xml.transform.TransformerException:java.lang.RuntimeException:サポートされていないXSL要素 'http://www.w3.org/1999/XSL/Transform:for-each-グループ '" – user2480257

+0

XSLT 2.0を使用できるようにするには、Saxon 9をダウンロードして使用する必要があります。 –

+0

Saxon 9はhttp://saxon.sourceforge.net/#F9.7HEのオープンソース版で入手できます。 –

関連する問題