我一直在争取这个XSL(Saxon/Java)代码几个小时,现在仍然无法确定。我变窄问题降低到这个片段:xsl:element + xsl:function = weirdness? (Saxon,Java)
<xsl:function name="my:fff" >
<xsl:element name="p0">
<p1 aaa='AAA' />
</xsl:element>
</xsl:function>
<xsl:function name="my:ggg">
<xsl:variable name="v" select="my:fff()" />
<!-- Debug messages -->
<xsl:message>
$v '<xsl:sequence select="$v" />'
$v/* '<xsl:sequence select="$v/*" />'
$v/*/@aaa '<xsl:value-of select="$v/*/@aaa" />'
$v/p0 '<xsl:sequence select="$v/p0" />'
</xsl:message>
...
</xsl:function>
由在my:ggg
打印的输出如下所示:
$v '<p0><p1 aaa="AAA"/></p0>'
$v/* '<p1 aaa="AAA"/>'
$v/*/@aaa 'AAA'
$v/p0 ''
前三行的罚款。但是输出空字符串的第四行很奇怪。我的意思是,如果$v
是<p0><p1 aaa="AAA"/></po>
(如第一行所示)那么为什么$v/p0
不是<p1 aaa="AAA"/>
?
我错过了什么?
'$ v'是'my:fff'返回的元素,所以它*是*'包含子元素的标签。 '$ v/p0'试图选择一个''作为'$ v'中的标签的子元素,因为'$ v'选择的标签''不包含'',所以它是空的。 –
rsp
@rsp - 你应该让这个答案,因为它*是答案。 –
@唐,确定完成:) – rsp