ответ

1

Синтаксис XSLT является правильным в первом примере. Вы также можете написать

<xsl:call-template name="myTemplate" > 
<xsl:with-param name="param1">val</xsl:with-param> 
</xsl:call-template> 

Я не уверен, что вы пытаетесь сделать во втором фрагменте кода (далее «Вал» отсутствует, и есть два опечаток (XLS, и myTeplate)), но это не является действительным XSLT.I n

UPDATE Если я теперь понимаю ваш вопрос, это было не «есть альтернативный синтаксис для шаблонов XSLT?» но «могу ли я написать свои собственные функции в XSLT?».

Да, вы можете. Вот полезное введение. Обратите внимание, что вы должны предоставить свой Java-код в библиотеке, и это может быть несложно распространять (например, в браузере). Попробуйте http://www.xml.com/pub/a/2003/09/03/trxml.html

+0

Для вызова нормализуют-пространства встроенные функции, мы передаем параметр как (param1, param2, paramn), Есть ли способ вызвать мой шаблон таким образом: < xsl: value-of select = "myTemplate (param1, param2)" /> –

+0

№ Синтаксис встроенных функций (например, normalize-spaces) отличается от синтаксиса шаблонов. –

+0

Итак, есть способ создать функции в XSLT? –

4

В XSLT 2.0 вы можете определить свои собственные функции с помощью xsl:function

статья о XML.com описания того, как писать свои собственные функции в XSLT 2.0: http://www.xml.com/pub/a/2003/09/03/trxml.html

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:foo="http://whatever"> 

    <!-- Compare two strings ignoring case, returning same 
     values as compare(). --> 
    <xsl:function name="foo:compareCI"> 
    <xsl:param name="string1"/> 
    <xsl:param name="string2"/> 
    <xsl:value-of select="compare(upper-case($string1),upper-case($string2))"/> 
    </xsl:function> 

    <xsl:template match="/"> 
compareCI red,blue: <xsl:value-of select="foo:compareCI('red','blue')"/> 
compareCI red,red: <xsl:value-of select="foo:compareCI('red','red')"/> 
compareCI red,Red: <xsl:value-of select="foo:compareCI('red','Red')"/> 
compareCI red,Yellow: <xsl:value-of select="foo:compareCI('red','Yellow')"/> 
    </xsl:template> 

</xsl:stylesheet> 
1

используйте устройство processing-instruction и соответствующий шаблон, который применяет параметры для этого:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Self-referencing Stylesheet href --> 
<?xml-stylesheet type="text/xsl" href="dyn_template_param.xml"?> 
<xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" 
      > 

<!--HTML5 doctype generator--> 
<xsl:output method="xml" encoding="utf-8" version="" indent="yes" standalone="no" media-type="text/html" omit-xml-declaration="no" doctype-system="about:legacy-compat" /> 

<!--Macro references--> 
<?foo param="hi"?> 
<?foo param="bye"?> 

<!--Self-referencing template call--> 
<xsl:template match="xsl:stylesheet"> 
    <xsl:apply-templates/> 
</xsl:template> 

<xsl:template match="/"> 
    <!--HTML content--> 
    <html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    </head> 
    <body> 
     <!--Macro template calls--> 
     <xsl:apply-templates/> 
    </body> 
    </html> 
</xsl:template> 

<xsl:template match="processing-instruction('foo')"> 
    <xsl:param name="arg" select="substring-after(.,'=')"/> 
    <xsl:if test="$arg = 'hi'"> 
    <p>Welcome</p> 
    </xsl:if> 
    <xsl:if test="$arg = 'bye'"> 
    <p>Thank You</p> 
    </xsl:if> 
</xsl:template> 
</xsl:stylesheet> 

Ссылки

Смежные вопросы