是否可以在属性中调用函数?

时间:2016-01-21 03:31:45

标签: xslt

我无法找到如何在代码中调用扩展函数:

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

我需要在foo:translit(human_url)之后添加对'{id}-'函数的调用,因此结果将显示为'/photo/{id}-{transliterated_part}',但似乎没有语法正确的方法!

1 个答案:

答案 0 :(得分: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"/>