2011-01-11 59 views
4

在PHP中使用本機XSL庫。是否有可能在變量內部獲取節點值,而無需通過exslt調用它:node-set every ... ....它長而難看。XSL:獲取可變數據,但不顯示:節點集

<xsl:variable name="mydata"> 
    <foo>1</foo> 
    <bar>2</bar> 
</xsl:variable> 


<!-- How currently being done --> 
<xsl:value-of select="exslt:node-set($mydata)/foo" /> 


<!-- I want to be able to do this --> 
<xsl:value-of select="$mydata/foo" /> 
+0

好問題,+1。當不需要`xxx:node-set()`時,請參閱我的答案以獲得解釋並獲得完整的代碼示例。 :) – 2011-01-12 03:40:44

+0

使用這種技術,我發現了兩件額外的事情,可能證明是重要的。文檔('')沒有引用包含的樣式表,所以你不能將你的變量放在你的包中的某處。其次,如果需要組合多個內聯構建的節點集,則不能使用變量,但可以在自定義名稱空間中使用多個元素將它們與xsl構造分離。 – 2011-01-13 01:09:59

回答

6
<xsl:variable name="mydata"> 
<foo>1</foo> 
<bar>2</bar> 
</xsl:variable> 

<!-- How currently being done --> 
<xsl:value-of select="exslt:node-set($mydata)/foo" /> 

<!-- I want to be able to do this --> 
<xsl:value-of select="$mydata/foo" /> 

如果變量的內容被靜態定義的,那麼它是可能從XPath表達式訪問它不使用xxx:node-set()擴展函數。

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 

<xsl:variable name="mydata"> 
    <foo>1</foo> 
    <bar>2</bar> 
</xsl:variable> 

<xsl:template match="/"> 
    <xsl:value-of select= 
    "document('')/*/xsl:variable[@name='mydata']/bar"/> 
</xsl:template> 
</xsl:stylesheet> 

當這種轉化是在任何XML文檔(未使用)施加時,想要的,正確的結果產生

2 
0

有可能調用node-set只需一次。將變量轉換爲節點集類型:

<!-- do it once at the beginning --> 
<xsl:variable name="mydatans" select="exslt:node-set($mydata)" /> 
<!-- anytime you need: --> 
<xsl:value-of select="$mydatans/foo" />