我正在尝试以下列方式将多个XML文件合并为一个:
假设我有一个名为fruit.xml
的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文件中,如下所示:
<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
,<include>
等) fruits.xml
然后将它们包含在输出中。
这可以使用XSLT吗?
答案 0 :(得分: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>