我有两个XML变量,下面是样本数据:
$变量1:
<Group>
<A>Test</A>
<B>Test1</B>
.....
.....
.....
</Group>
$变量2:
<Data>
<ABC>Test</ABC>
<XYZ>Test1</XYZ>
.....
.....
.....
</Data>
现在我想在XSLT中合并这两个变量并在同一个XSLT中使用输出,因此在合并后输出将如下所示:
<Group>
<A>Test</A>
<B>Test1</B>
.....
.....
.....
<ABC>Test</ABC>
<XYZ>Test1</XYZ>
.....
.....
.....
</Group>
以上输出将在同一个XSLT中传递以进行进一步处理。
下面是xslt示例,我试过了:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="var1" select="document($Variable1)" />
<xsl:param name="var2" select="document($Variable2)" />
//Here I want to merge above to inputs and later will be used in XSLT below
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Group">
-------
-------
-------
-------
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
如果您采用以下样式表:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="file1"/>
<xsl:param name="file2"/>
<xsl:template match="/">
<xsl:apply-templates select="document($file1)/*"/>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:apply-templates select="document($file2)/*/*"/>
</xsl:copy>
</xsl:template>
<!-- identity transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
并将路径传递给您的两个文件(作为字符串),将返回以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<Group>
<A>Test</A>
<B>Test1</B>
<ABC>Test</ABC>
<XYZ>Test1</XYZ>
</Group>
当然,您还需要第三个(虚拟)XML文件来运行转换。更智能的实现将使用第一个输入文件作为源XML,并仅将第二个文件的路径作为参数传递。