2012-06-08 35 views
1

取值I C型的URL:/ Documents和設置/薩克森/輸出1/index.html的價值= 65abc如何動態地從URL中XSLT

現在我需要從網址提取這部分' 65abc'在我的xslt中。點擊鏈接時,我從上一頁獲取該值。

任何想法如何做到這一點?

+2

的XSL本身不能訪問URL變量 - 您需要手動傳遞這些變量。你在哪個平臺上運行XSL?例如,在PHP中,您可以使用'$ process-> setParameter'。然後,只要你的XSL聲明瞭變量,它就會收到它,你可以引用它。 – Utkanos

+0

感謝您的回覆!我正在使用XSLT將XML轉換爲HTML。我想要有2個HTML文件,我正在使用Saxon。在我有鏈接的第一個文件中,當我點擊鏈接時,一個值被髮送到網址。爲了做到這一點,我正在使用 - 現在,當我點擊鏈接時,我可以獲得url中的值,現在我需要使用來自我的XSLT中的網址顯示其他詳細信息。 – user1402867

+1

這不是一個URL,它是一個Windows文件名。 –

回答

1

使用

substring-after($pPath, '=') 

其中$pPath是包含URL-等)的文件路徑的值,從變換的調用傳遞的整體外部xsl:param參考。

在情況下pPath包含一個以上的查詢字符串參數,你要訪問的第一個的值,然後使用

substring-after(substring-before(substring-after($pPath, '?'), '&'), '=') 

如果使用XSLT 2.0(XPath 2.0中) ,那麼你可以使用訪問命名$pQName查詢字符串參數的值:

substring-after 
    (tokenize(substring-after($pPath, '?'), '&') 
     [starts-with(., concat($pQName, '='))], 
    '=' 
    ) 

這裏有COMPLE TE代碼示例

  1. 最簡單的情況

。 。 。

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

    <xsl:param name="pPath" select= 
    "'C:/Documents and Settings/Saxon/output1/index.html?value=65abc'"/> 

<xsl:template match="node()|@*"> 
    <xsl:sequence select="substring-after($pPath, '=')"/> 
</xsl:template> 
</xsl:stylesheet> 

時,這是對任何XML文檔(未使用)施加時,所需的結果產生

65abc 

0.2。 當在任何XML文檔(未使用)進行這種轉變:

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

    <xsl:param name="pPath" select= 
    "'C:/Documents and Settings/Saxon/output1/index.html?value=65abc&amp;x=1&amp;y=2'"/> 
    <xsl:param name="pQName" select="'x'"/> 

<xsl:template match="node()|@*"> 
    <xsl:sequence select= 
    "substring-after 
     (tokenize(substring-after($pPath, '?'), '&amp;') 
      [starts-with(., concat($pQName, '='))], 
     '=' 
    )"/> 
</xsl:template> 
</xsl:stylesheet> 

有用字符串(命名x查詢字符串參數的值)產生

1