XSLT объединяет два XML-файла, если содержимое элемента одинаково - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно объединить два XML-файла определенным образом.

XML-файл 1

<csv_data>
<row>
    <important_id>AAAAAAAAAAAAAAAA</important_id>
    <importantstuff>very important</importantstuff>
    <alotmore>stuff</alotmore>
</row>
<row>
    <important_id>BBBBBBBBBBBBBBBB</important_id>
    <importantstuff>very important</importantstuff>
    <alotmore>stuff</alotmore>
</row>

XML-файл 2

<csv_data2>
<row1>
    <some_id>213421342134</some_id>
    <important_id>AAAAAAAAAAAAAAAA</important_id>
    <another_id>125135345345</another_id>
    <importantstuffhere>very important stuff here</importantstuffhere>
    <alotmoreandmore>stuff</alotmoreandmore>
</row1>
<row2>
    <some_id>3452345</some_id>
    <important_id>AAAAAAAAAAAAAAAA</important_id>
    <another_id>234234</another_id>
    <importantstuffhere>very important stuff here2</importantstuffhere>
    <alotmoreandmore>stuff2</alotmoreandmore>
</row2>

Объединенный XML-файл

<csv_data>
<row>
    <important_id>AAAAAAAAAAAAAAAA</important_id> (from XML-file 1)
    <importantstuff>very important</importantstuff> (from XML-file 1)
    <alotmore>stuff</alotmore> (from XML-file 1)
    <importantstuffhere>very important stuff here</importantstuffhere> (from XML-file 2 row1)
    <importantstuffhere>very important stuff here2</importantstuffhere> (from XML-file 2 row2)
    <importantstuffhere>very important stuff here3</importantstuffhere> (from XML-file 2 row3)
</row>
<row>
    <important_id>BBBBBBBBBBBBBBBB</important_id> (from XML-file 1)
    <importantstuff>very important</importantstuff> (from XML-file 1)
    <alotmore>stuff</alotmore> (from XML-file 1)
    <importantstuffhere>very important stuff here</importantstuffhere> (from XML-file 2 row20)
    <importantstuffhere>very important stuff here2</importantstuffhere> (from XML-file 2 row21)
</row>

XML-файл 1 имеет только 1 раз, XML-файл 2 может иметь один и тот же идентификатор пару раз во время соединения.Теперь мне нужны сестринские элементы из XML-файла2 с тем же идентификатором, объединенным с XML-файлом1.Почему-то ясно, что я имею в виду?

Нужен ли мне сначала список всех идентификаторов?Я действительно не знаю, с чего начать.Я только знаю, что мне понадобятся [...] apply-templates select = "document ('xml-file') [...].

1 Ответ

0 голосов
/ 05 июня 2018

Я думаю, что нашел решение:

<?xml version="1.0" encoding="UTF-8"?>

<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates/>
    </xsl:copy>
</xsl:template>

<xsl:template match="row">
    <xsl:copy>
        <xsl:apply-templates/>
        <xsl:copy-of select="document('file2.xml')//row[important_id = current()/important_id]"/>
    </xsl:copy>
</xsl:template>

Вывод не совсем то, что я хотел, но я думаю, что я могу работать сздесь.

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