我有两段代码,我认为应该做同样的事情,但有一段不起作用。
返回值
<xsl:variable name="x" select="sources/source[@type='A']"></xsl:variable>
<xsl:value-of select="$x/name"></xsl:value-of>
这不会返回值
<xsl:function name="eul:xx">
<xsl:param name="root"></xsl:param>
<xsl:variable name="a" select="$root/sources/source[@type='A']"/>
<xsl:value-of select="$a" separator=" "></xsl:value-of>
</xsl:function>
<xsl:variable name='x2' select="eul:xx(/)"></xsl:variable>
<xsl:value-of select="$x2/name"></xsl:value-of>
我希望能够返回一些我可以查询的内容,就像我在主模板中创建的内容一样。有趣的是,如果我在函数中选择 name 元素而不是在调用函数之后它也可以工作:
<xsl:value-of select="$a/name" separator=" "></xsl:value-of>
因此看起来在返回值时会发生一些事情。
答案 0 :(得分:1)
这是数据类型的问题。 xsl:value-of
指令生成文本节点。文本节点不能有子节点,因此表达式$x2/name
没有意义。
另请注意,通过使用xsl:value-of
指令,您的函数会提取引用节点的文本值 - 与第一个版本不同,其中$ x包含引用的节点本身。
答案 1 :(得分:0)
我认为解决方案是替换
<xsl:value-of select="$a" separator=" "></xsl:value-of>
带
<xsl:copy-of select="$a"></xsl:copy-of>