11
Сен
2021

Преобразовать XML файл с помощью XSLT и записать в другой XML

Помогите разобраться, никак до меня не доходит. Есть XML документ("1.xml"), выглядит так:

<entries>
    <entry>
        <field>1</field>
    </entry>
    <entry>
        <field>2</field>
    </entry>
    <entry>
        <field>3</field>
    </entry>
    
</entries>

Нужно из него, посредством xslt сделать, чтобы выглядело так:

<entries>
<entry field="значение поля field">
...
<entry field="значение поля field">
</entries>

Вот мой XSLT("red.xslt") файл:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="entries">
        <entries>
            <xsl:apply-templates/>
        </entries>
    </xsl:template>

    <xsl:template match="entry">
        <entry>
            <xsl:for-each select="*">
                <xsl:attribute name="{name()}">
                    <xsl:value-of select="text()"/>
                </xsl:attribute>
            </xsl:for-each>
        </entry>
    </xsl:template>
</xsl:stylesheet>

Пытаюсь написать метод, который будет использовать исходный XML и XSLT и создавать новый XML, который уже с нужной разметкой:

public static void transformationXML(){
        try {
            File stylesheet = new File("red.xslt");
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.parse("1.xml");

            StreamResult file = new StreamResult(new File("2.xml"));
            StreamSource stylesource = new StreamSource(stylesheet);
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            DOMSource source = new DOMSource(document);
            transformer.transform(stylesource,file);



        }catch (ParserConfigurationException | SAXException | IOException | TransformerConfigurationException e){
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }

Как вы уже поняли, ничего не выходит. Пожалуйста, подскажите как это реализовать.

P.S. Пытался описать ситуацию максимально наглядно (и понятно), чтобы не возникало лишних вопросов. Спасибо;)

Источник: https://ru.stackoverflow.com/questions/1327395/%D0%9F%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-xml-%D1%84%D0%B0%D0%B9%D0%BB-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-xslt-%D0%B8-%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C-%D0%B2-%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9-xml

Тебе может это понравится...

Добавить комментарий