2013-10-30 57 views
0

我遇到了一個預期的問題,我想知道是否有比我的解決方案更好的解決方案。Xpath:從每個循環的文檔節點變量中選擇節點

所以,我有一個文檔節點變量:

<xsl:variable name="variableNode" as="document-node()"> 
     <xsl:document> 
      <root> 
      <element>...content...</element> 
     <root> 
     </xsl:document>  
    </xsl:variable> 

這個文檔節點變量的內容是由一個for-each循環後處理:

<xsl:for-each select="$variableNode/root/element"> 
...content... 
</xsl:for-each> 

從這種內容內for-each循環我試圖通過這個xslt樣式表獲取實際的xml文件進程的元素。但那並不奏效。

於是,我把文件名到一個變量這樣

<xsl:variable name="actual_filename" select="base-uri()"/> 

,並獲得由DOC-功能所需的元素。 (doc($ actual_filename)/)

這在我的情況很好,但我想知道它是否是一個優雅的解決方案,尤其是如果輸入是沒有文件,但一些其他的XML內容。

你能想出更好的解決方案嗎?謝謝!

回答

2

通常的方法是一個頂級

<xsl:variable name="main-root" select="/"/> 

到主輸入文檔節點存儲在變量中,然後內部的的for-each或模板與來自不同的文檔可以隨時上下文節點訪問變量

<xsl:for-each select="$variableNode/root/element"> 
    <xsl:value-of select="$main-root//foo[@id = current()/@id]"/> 
</xsl:for-each>