我有2个xsl样式表,它们都转换元素<Group id="all">
:
输出应该合并,而是被main.xslt
或include.xslt
覆盖。 (取决于订单)
我不想修改include.xslt
文件,因为它在其他样式表中共享,不应修改。
main.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="include.xslt"/>
<xsl:template match="Group[@id='all']">
<xsl:copy>
<xsl:copy-of select="@*|node()" />
<xsl:apply-templates select="document('part1.xml')" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
include.xslt
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Group[@id='all']">
<xsl:copy>
<xsl:copy-of select="@*|node()" />
<xsl:apply-templates select="document('part2.xml')" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
input.xml中
<?xml version="1.0"?>
<Group id="all">
testdata below:
</Group>
part1.xml
<?xml version="1.0"?>
<data id="test1">
Here is some test data.
</data>
part2.xml
<?xml version="1.0"?>
<data id="test2">
Here is some more data.
</data>
实际输出:
<?xml version="1.0"?>
<Group id="all">
testdata below:
Here is some test data.
</Group>
预期产出:
<?xml version="1.0"?>
<Group id="all">
testdata below:
Here is some test data.
Here is some more data.
</Group>
答案 0 :(得分:0)
执行此操作的常规方法是使用xsl:import
代替xsl:include
,然后添加xsl:apply-imports
...
<强> main.xslt 强>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="include.xslt"/>
<xsl:template match="Group[@id='all']">
<xsl:copy>
<xsl:copy-of select="@*|node()" />
<xsl:apply-templates select="document('part1.xml')" />
<xsl:apply-imports/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
但是,你最终得到的是两个Group
个元素,一个嵌套在另一个元素内(你可以在xsl:apply-imports
之后移动xsl:copy
以获得一个元素另一个)......
<Group id="all">
testdata below:
Here is some test data.
<Group id="all">
testdata below:
Here is some more data.
</Group></Group>
所以我可以看到你要么(选择一个):
Group
元素。node-set()
之类的扩展函数(或使用XSLT 2.0)将Group
结构保存在变量中,然后处理变量以合并Group
s。include.xslt
,使其无法输出Group
(或文字testdata below:
)。