动态包括使用XSLT的XML文件(Dynamically include XML files usi

2019-10-29 12:53发布

我想多个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?

Answer 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>


文章来源: Dynamically include XML files using XSLT