我使用的是Xalan-j 2.7.1。我使用exslt函数的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>
如果结果树片段中有节点,并希望将它们输出到结果树,则需要使用<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>