0

我正在尝试通过以下方式将多个 XML 文件合并为一个:

假设我有一个 XML 文件,名为fruit.xml

<fruit>
    <apples>
        <include ref="apples.xml" />
    </apples>
    <bananas>
        <include ref="bananas.xml" />
    </bananas>
    <oranges>
        <include ref="oranges.xml" />
    </oranges>
</fruit>

以及随后引用的 XML 文件,fruit.xml例如apples.xml

<fruit>
    <apples>
        <apple type="jonagold" color="red" />
        <... />
    </apples>
</fruit>

等等...我想将它们合并到 1 个 XML 文件中,如下所示:

<fruit>
    <apples>
        <apple type="jonagold" color="red" />
        <... />
    </apples>
    <bananas>
        <banana type="chiquita" color="yellow" />
        <... />
    </bananas>
    <oranges>
        <orange type="some-orange-type" color="orange" />
        <... />
    </oranges>
</fruit>

我想根据元素中的属性值动态确定“子”文件(如apples.xmlbananas.xml等),然后将它们包含在输出中。ref<include>fruits.xml

这可能使用 XSLT 吗?

4

1 回答 1

1

如果只包含文件的竞争,您可以使用:

<xsl:copy-of select="document(@ref)/fruit/*/*"/>

因此试试这个:

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

    <xsl:output indent="yes" method="xml" encoding="utf-8" omit-xml-declaration="yes" />

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

    <xsl:template match="include">
        <xsl:copy-of select="document(@ref)/fruit/*/*"/>
    </xsl:template>
</xsl:stylesheet>
于 2013-05-21T14:03:19.620 回答