2016-01-21 27 views
0

我無法找到一個可以如何調用一個擴展函數在一個這樣的代碼:是否可以在屬性中調用函數?

<xsl:if test='string-length(normalize-space(body)) &gt; 100'> 
    <a href='/photo/{id}-'> &gt;&gt;&gt;</a><br/> 
</xsl:if> 

我需要'{id}-'後,將呼叫添加到我的foo:translit(human_url)功能,因此結果將是'/photo/{id}-{transliterated_part}',但似乎有沒有語法正確的方法來做到這一點!

回答

1

是的,這是完全可能的。只是隨便調用你的函數包裹在花括號,是這樣的:

<a href='/photo/{id}-{foo:translit(human_url)}'> &gt;&gt;&gt;</a> 

下面是使用用戶定義的函數foo:upper-lower()演示,它會返回大寫和接收到的參數,用下劃線分隔的小寫形式:

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform exclude-result-prefixes="foo xs" xmlns:foo="bar" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output encoding="UTF-8" indent="yes" /> 

    <xsl:function name="foo:upper-lower" as="xs:string"> 
     <xsl:param name="input" as="xs:string"/> 
     <xsl:sequence select="concat(upper-case($input),'_',lower-case($input))"/> 
    </xsl:function> 

    <xsl:template match="a"> 
     <a href="/photo/{.}-{foo:upper-lower(.)}"></a> 
    </xsl:template> 
</xsl:transform> 

xsltransform.net demo

輸入:

<a>Test</a> 

輸出:

<a href="/photo/Test-TEST_test"/> 
相關問題