XSLT:从另一个文件复制并应用模板
问题描述:
我有两个xml文件,第一个(匹配的文件)包含需要提取的id字段。 我需要将此id导出到第二个xml。XSLT:从另一个文件复制并应用模板
first.xml:
<A>
...
<data>blabla<id>15201<id>blabla</data>
...
</A>
seconnd.xml:
<B>
...
<id>4621</id>
...
</B>
预期结果:
<B>
...
<id>15201</id>
...
</B>
我知道,这将是容易匹配第二个文件,包括ID从第一,但在我的情况是不可能的,我必须匹配first.xml
这就是我试图做的:
...
<xsl:variable name="id" select="substring-before(substring-after(//*[local-name()='data'], 'id>'), '<')" />
<xsl:variable name="file" select="document('second.xml')" />
...
<xsl:template match="id"><id><xsl:value-of select="$id" /></id></xsl:template>
<xsl:template match="/">
<xsl:copy>
<xsl:copy-of select="$file" />
<xsl:apply-templates />
</xsl:copy>
</xsl:template>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
...
但我仍然得到这个结果为(复制该文件,但不应用模板):提前
<B>
...
<id>4621</id>
...
</B>
感谢。
答
使用
<xsl:template match="/">
<xsl:apply-templates select="$file/node()"/>
</xsl:template>
它的工作,谢谢! 你能告诉我 和 有什么区别吗? –
用' '将文件'$ file'复制到输出,完全不变和未处理。而你的' '只处理你不想处理的原始输入文档,除了提取id的值。 –
感谢@Martin现在我明白了 –