2016-04-28 3 views
0

Freunde,Wie XSLT verwenden, um einen ouput XML-Datei zu erzeugen, durch das Lesen und Verarbeitung von mehreren Input xml

Ich bin neu in XSLT. Bitte helfen Sie, die folgende Logik zu erhalten. Ich bin mit Unix-Maschine

Von der unter 3 Eingabe XML-Datei, müssen ‚count‘ Feldwert durch Xslt verwenden und benötigen Ausgabe mit Mehrwert in Zählfeld

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> 

Eingang XML zu generieren 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-Input-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> 

Aus der obigen drei Eingangs XML-Datei, hinzufügen müssen Zählwert von Xslt verwenden und benötigen Ausgabe mit Mehrwert für Zählfeld XML

Ausgabe zu erzeugen:

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

Vielen Dank im Voraus

+0

Wie identifizieren Sie die Themen in den verschiedenen Dateien, die gruppiert werden sollen, nach 'make' und' Model'? –

Antwort

1

auf der document() Funktion Lesen Sie auf, und (1,1) die doc() Funktion.

In 1.1, lesen Sie xsl:for-each-group und deep-equal().

In sowohl 1.0 als auch 1.1, lesen Sie sum().

0

Sie können in Dateien lesen mit Sammlung (die Syntax in der Probe verwendet wird, ist Saxon 9 spezifisch):

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

Run Saxon 9 -it:main Verwendung mit dieser Vorlage main genannt zu starten.

+0

Danke für Ihre Eingabe. Während der Ausführung von xslt, habe diesen Fehler .... "javax.xml.transform.TransformerException: java.lang.RuntimeException: Nicht unterstütztes XSL-Element" http://www.w3.org/1999/XSL/Transform:for-e-ach- Gruppe '" – user2480257

+0

Sie müssen Saxon 9 herunterladen und verwenden, um XSLT 2.0 verwenden zu können. –

+0

Saxon 9 ist in einer Open Source-Version von http://saxon.sourceforge.net/#F9.7HE verfügbar. –