2012-02-09 35 views
5

Có thể chuyển biến URL vào xsl hay không.Chuyển biến URL vào xsl

EG. http: www.somedomain.com/index.aspx myVar = test & myVar2 = anotherTest

Tôi muốn để có thể sử dụng các giá trị của myVar và myVar2 trong logic của tập tin xsl tôi?. Cảm ơn.

Trả lời

5

Chắc chắn, bạn có thể. Sử dụng phần tử xsl:param trong xsl:stylesheet thông số phần tử và thông số từ công cụ XSL của bạn.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:param name="url"/> 

Sau đó, sử dụng chuỗi chức năng, ví dụ:

<xsl:variable name="right-part" select="substring-after($url, 'myVar=')"/> 
<xsl:value-of select="substring-before(substring-before($right-part, 'myVar2='), '&amp;')"/> 
<xsl:text>|</xsl:text> 
<xsl:value-of select="substring-after($right-part, 'myVar2=')"/> 
+0

Sau đó, tôi cần phải phân tách URL để truy cập các giá trị của myVar và myVar2? –

+0

@ user1001421, tôi đã cập nhật câu trả lời của mình. –

+0

Tuyệt vời. Cám ơn rất nhiều về sự giúp đỡ của bạn. Chỉ là những gì tôi đã sau. –

1

Đây là một sự chuyển đổi chung chung hơn mà có được bất kỳ số lượng các thông số chuỗi truy vấn từ một URL cho:

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

<xsl:param name="pUrl" select= 
"'http:www.somedomain.com/index.aspx?myVar=test&amp;myVar2=anotherTest&amp;myVar3=yetAnotherTest'"/> 

<xsl:template match="/"> 
    <xsl:call-template name="GetQueryStringParams"/> 
</xsl:template> 

<xsl:template name="GetQueryStringParams"> 
    <xsl:param name="pUrl" select="$pUrl"/> 

     <xsl:variable name="vQueryPart" select= 
     "substring-before(substring-after(concat($pUrl,'?'), 
             '?'), 
         '?')"/> 

     <xsl:variable name="vHeadVar" select= 
     "substring-before(concat($vQueryPart,'&amp;'), '&amp;')"/> 

     <xsl:element name="{substring-before($vHeadVar, '=')}"> 
     <xsl:value-of select="substring-after($vHeadVar, '=')"/> 
     </xsl:element> 

    <xsl:variable name="vRest" select="substring-after($vQueryPart, '&amp;')"/> 

    <xsl:if test="string-length($vRest) > 0"> 
     <xsl:call-template name="GetQueryStringParams"> 
     <xsl:with-param name="pUrl" select= 
     "concat('?', substring(substring-after($vQueryPart, $vHeadVar), 2))"/> 
     </xsl:call-template> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

khi phép biến đổi này được áp dụng trên bất kỳ tài liệu XML nào (không được sử dụng), kết quả mong muốn, chính xác được tạo ra:

<myVar>test</myVar> 
<myVar2>anotherTest</myVar2> 
<myVar3>yetAnotherTest</myVar3> 
+0

Xin lỗi Dimitre. Tôi vừa mới kiểm tra lại câu hỏi này. Điều đó có vẻ rất ấn tượng và tôi chắc chắn sẽ thử nó. Cảm ơn vì đã dành thời gian cho tôi. –

+0

@ user1001421: Bạn được chào đón. –

Các vấn đề liên quan