本文介绍了动态地使用XSLT包含XML文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正试图通过以下方式将多个XML文件合并成一个:

I am trying to merge multiple XML files into one in the following manner:

说我有一个XML文件,名为 fruit.xml :

Say I have an XML file, called fruit.xml:

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

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

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

等等...我想将它们合并成1个XML文件,如下所示: / p>

and so on... I would like to merge these into 1 XML file, like such:

<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.xml , bananas.xml 等)动态地基于 ref 属性的值 元素 fruits.xml ,然后将它们包含在输出中。

I want to determine the "child" files (like apples.xml, bananas.xml, etc.) dynamically based on the values of the ref attributes in the <include> elements of fruits.xml and then include them in the output.

是否可以使用XSLT?

推荐答案

应该包含一个档案的争议:

If only the contend of an file should be included you can use:

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

这篇关于动态地使用XSLT包含XML文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-06 06:57