2017-10-11 72 views
0

我有两个xml文件,第一个(匹配的文件)包含需要提取的id字段。 我需要将此id导出到第二个xml。XSLT:从另一个文件复制并应用模板

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> 

感谢。

回答

0

使用

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

它的工作,谢谢! 你能告诉我有什么区别吗? –

+0

用''将文件'$ file'复制到输出,完全不变和未处理。而你的''只处理你不想处理的原始输入文档,除了提取id的值。 –

+0

感谢@Martin现在我明白了 –

相关问题