2017-10-11 85 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現在我明白了 –

相關問題