Как использовать XSLT для генерации одного выходного XML-файла путем чтения и обработки из нескольких входных XML-файлов

Друзья,

Я новичок в XSLT. Пожалуйста, помогите получить приведенную ниже логику. Я использую unix машину

Из приведенного ниже 3 входного XML-файла нужно добавить значение поля count, используя xslt, и сгенерировать вывод с добавленным значением в поле count.

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 и сгенерировать вывод с добавленным значением для поля счетчика

Выходной 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>

Заранее спасибо

2 ответа

Читайте на document() функция и (для 1.1) doc() функция.

В 1.1 читайте дальше xsl:for-each-group а также deep-equal(),

В версиях 1.0 и 1.1 читайте sum(),

Вы можете читать в файлах, используя коллекцию (синтаксис, используемый в примере, специфичен для Saxon 9):

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

Запустите Saxon 9, используя -it:main начать с этого шаблона под названием main,

Другие вопросы по тегам