2013-08-30 42 views
2

問題快速概述:Iam使用xslt 1.0轉換xml,其中xml是具有url的節點。與xsl 1.0我可以得到這些節點值,當我得到這些值我需要使用它們從xslt加載另一個xml文件,它的工作原理如果我手動使用這些節點值與文檔()函數,但我需要自動執行它。使用document()函數在xslt 1.0中加載外部xml,但將文檔的url作爲變量傳遞

在XSLT加載外部XML是相當直接向前:

<xsl:copy-of select="document('URL_OF_XML')/node1/node2"/> 

和它的作品,因爲它應該。

但如果我的外部XML的URL被存儲在一個變量,如:

<xsl:variable name="MY_VARIABLE"> 
    <xsl:value-of select="some_node_containing_url"/> 
</xsl:variable> 

<xsl:copy-of select="document('HOW_TO_USE_VARIBALE_VALUE_HERE') /> 

我曾嘗試:

<xsl:copy-of select="document($MY_VARIABLE)" /> -> works after see UPDATE 2 below 

<xsl:copy-of select="document('$MY_VARIABLE')" /> nothing happend 

<xsl:copy-of select="document({$MY_VARIABLE})" /> nothing happend, ofc {} are for attributes 

<xsl:copy-of select="document('<xsl:value-of select="MY_VARIABLE"/>')" /> we cant use "<" ">" in document function 

也許我走錯了路,和任何形式的幫助將不勝感激,TY提前

更新1個-Works: 得到它的工作使用CONCAT並添加一個空字符串,以我的變量,如:

<xsl:copy-of select="document(concat('',$MY_VARIABLE))"/> 

UPDATE 2 -works: 正在關注@G。肯·霍爾曼建議我redecalared我的變量來自:

<xsl:variable name="MY_VARIABLE"> 
     <xsl:value-of select="some_node_containing_url"/> 
</xsl:variable> 

到:

<xsl:variable name="MY_VARIABLE" select="some_node" /> 

,只是叫我複製的:

<xsl:copy-of select="document($MY_VARIABLE)"/> 

和所有的作品。感謝您的幫助和建議! 結論:唯一的問題是我的變量聲明,現在document()函數接受所有對$ MY_VARIABLE的調用,不需要任何concat,但是也適用,並且string($ MY_VARIABLE)在重新聲明之後起作用。感謝大家爲他們的時間提供幫助!

+0

我想到的第一個工作,但請給這一個嘗試:'文件(字符串($ MY_VARIABLE))'。 – JLRishe

+0

Ty爲建議,在我重新聲明瞭我的變量後,所有東西都可以使用,也可以使用您的解決方案。 ty再次 – user2732475

回答

2

我認爲你的問題是一個相對URI的基礎。當document()的參數被評估爲一個字符串時,基本URI就是樣式表。當document()的參數被評估爲一個節點時,基本URI就是該節點的基本URI。

您已經通過document()函數將其用作字符串的方式聲明爲變量:作爲結果樹片段。

如果使用select="some_node"而不是子xsl:value-of聲明變量,則會將參數的數據類型更改爲document()函數,該函數會更改評估的基礎URI,這可能會改變結果。

否則,你的第一行是正確的:document($variable)

+0

Ty,我會盡快嘗試它,現在我的解決方案只是將一個空字符串與我的變量相連,如下所示: user2732475

相關問題