2016-04-28 135 views
0

朋友,如何使用XSLT通過讀取和處理多個輸入xml來生成一個輸出xml文件

我是XSLT的新手。請幫助獲取以下邏輯。我使用UNIX機器

從下面3輸入XML文件,需要通過使用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:

<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> 

由於提前

+0

如何通過'make'和'Model'來識別不同文件中的'topic's組合在一起? –

回答

1

document()功能閱讀起來,和(1.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

您需要下載並使用Saxon 9才能使用XSLT 2.0。 –

+0

Saxon 9以http://saxon.sourceforge.net/#F9.7HE的開源版本提供。 –

相關問題