我想合并多个XML文件,我在网上搜索没有人这样做,所以......
让我解释一下;
这是我的第一个xml:
<?xml version = "1.0" ?>
<racine>
<info>
<price>50</price>
<physic>
<color>blue</color>
<height>1</height>
</physic>
</info>
</racine>
第二个:
<?xml version = "1.0" ?>
<racine>
<info>
<price>100</price>
<physic>
<color>black</color>
<height>2</height>
</physic>
</info>
</racine>
我想要这个输出;
<?xml version = "1.0" ?>
<racine>
<info>
<price>50</price>
<physic>
<color>blue</color>
<height>1</height>
</physic>
</info>
<info>
<price>100</price>
<physic>
<color>black</color>
<height>2</height>
</physic>
</info>
</racine>
你有任何解决方案/想法吗?
谢谢,祝你有愉快的一天!
答案 0 :(得分:1)
考虑到上面共享的输入XML,可以使用在第一个输入XML上应用的以下XSL来合并它们。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:param name="fileName" select="document('2.xml')" />
<!-- identity transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="racine">
<xsl:copy>
<!-- retain existing nodes of 1.xml as is -->
<xsl:apply-templates select="@* | node()" />
<!-- copy required nodes from 2.xml -->
<xsl:apply-templates select="$fileName/racine/*" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
输出
<racine>
<info>
<price>50</price>
<physic>
<color>blue</color>
<height>1</height>
</physic>
</info>
<info>
<price>100</price>
<physic>
<color>black</color>
<height>2</height>
</physic>
</info>
</racine>
答案 1 :(得分:0)
它几乎可以作为单行完成:
<xsl:template name="main">
<racine>
<xsl:copy-of select="(doc('doc1.xml')|doc('doc2.xml'))/racine/*"/>
</racine>
</xsl:template>