func:函数返回结果树片段

时间:2013-06-25 06:43:29

标签: xslt xslt-1.0 exslt

我正在使用Xalan-j 2.7.1。我已经使用exslt func:函数扩展的xalans实现编写了一个函数。我试图通过将输出xml的可重复部分用于函数来使我的xslt更清洁。以下函数表示我正在尝试做的事情。

预期的输出是一个xml树片段,但我没有看到任何输出。虽然在exslt.org文档中提到了

,但我不知道为什么这不起作用

xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
   xmlns:func="http://exslt.org/functions" 
   xmlns:common="http://exslt.org/common"
   xmlns:my="http://my.org/my"
   exclude-result-prefixes="func common my"> 
   <xsl:output type="xml" indent="yes" /> 

   <func:function name="my:personinfo"> 
       <xsl:param name="name" /> 
       <xsl:param name="address" /> 
    <func:result>
       <xsl:element name="details"> 
            <xsl:element name="name" select="$name" />
            <xsl:element name="address" select="$address" />  
       </xsl:element>          
    </func:result> 
   </func:function> 

   <xsl:element name="results">
         <xsl:value-of select="my:personinfo('john', '02-234 pudding lane, london')" />
   </xsl:element> 
</xsl:stylesheet>

1 个答案:

答案 0 :(得分:1)

如果结果树片段中有节点并希望将它们输出到结果树,则需要使用<xsl:copy-of select="my:personinfo('john', '02-234 pudding lane, london')"/>,而不是value-of

但请注意,xsl:element不会使用select属性,如果您想要创建元素,只需使用文字结果元素,例如

<details>
  <name><xsl:value-of select="$name"/></name>
  <address><xsl:value-of select="$address"/></address>
</details>

或者如果您想使用xsl:element,请确保使用正确的语法填充元素,例如

<xsl:element name="name"><xsl:value-of select="$name"/></xsl:element>