Как преобразовать документ XML с помощью XSLT - PullRequest
0 голосов
/ 24 января 2019

Мне нужно взять файл XML и создать новый выходной файл. При создании выходного файла мне нужно суммировать количества по материалу

Это мой входной файл: -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <record>
        <MATERIAL>Material1</MATERIAL>
        <SALES_DIST>FS</SALES_DIST>
        <REGION>North</REGION>
        <FIELDNM001>EA</FIELDNM001>
        <MONTH>2020-01-01</MONTH>
        <FIELDNM002>1</FIELDNM002>
    </record>
    <record>
        <MATERIAL>Material1</MATERIAL>
        <SALES_DIST>FS</SALES_DIST>
        <REGION>North</REGION>
        <FIELDNM001>EA</FIELDNM001>
        <MONTH>2020-01-01</MONTH>
        <FIELDNM002>1</FIELDNM002>
    </record>
</data-set>

В итоге мне нужно получить файл, подобный следующему: -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <record>
        <MATERIAL>Material1</MATERIAL>
        <SALES_DIST>FS</SALES_DIST>
        <REGION>North</REGION>
        <FIELDNM001>EA</FIELDNM001>
        <MONTH>2020-01-01</MONTH>
        <FIELDNM002>2</FIELDNM002>
    </record>
</data-set>

Любые идеи о том, как должен выглядеть документ xslt для достижения этой цели?

Большое спасибо заранее.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <record>
        <MATERIAL>Material1</MATERIAL>
        <SALES_DIST>FS</SALES_DIST>
        <REGION>North</REGION>
        <FIELDNM001>EA</FIELDNM001>
        <MONTH>2020-01-01</MONTH>
        <FIELDNM002>2</FIELDNM002>
    </record>
</data-set>

1 Ответ

0 голосов
/ 24 января 2019

Начиная с этого ответа , для меня работает следующее с использованием xsltproc в Linux:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:gt="http://www.gtech.com/lsp/2009-09-23"
                exclude-result-prefixes="gt">

    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <data-set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <record>
                <MATERIAL><xsl:value-of select="//MATERIAL" /></MATERIAL>
                <SALES_DIST><xsl:value-of select="//SALES_DIST" /></SALES_DIST>
                <REGION><xsl:value-of select="//REGION" /></REGION>
                <FIELDNM001><xsl:value-of select="//FIELDNM001" /></FIELDNM001>
                <MONTH><xsl:value-of select="//MONTH" /></MONTH>
                <FIELDNM002><xsl:value-of select="sum(//FIELDNM002[.])"/></FIELDNM002>
            </record>
        </data-set>
    </xsl:template>
</xsl:stylesheet>

Если другие поля записей в xml не равны, он принимает только значения первых записей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...