XSLT:从另一个文件复制并应用模板

时间:2017-10-11 09:45:26

标签: xml xslt

我有两个xml文件,第一个(匹配文件)包含需要提取的id字段。 我需要将此id导出到第二个xml。

first.xml:

<A>
...
<data>blabla&lt;id&gt;15201&lt;id&gt;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&gt;'), '&lt;')" />

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

提前致谢。

1 个答案:

答案 0 :(得分:0)

使用

<xsl:template match="/">
  <xsl:apply-templates select="$file/node()"/>
</xsl:template>