Saxon自定义xpath函数参数

时间:2013-11-29 16:22:38

标签: java xml xpath saxon

我正在编写一个自定义xpath函数,它应该接收一个元素作为参数。我正在使用saxon来注册和执行函数。 例如,如果我有xml结构

<b>
<a>1</a>
<a>2</a>
</b>

和表达式a:foo(/b/a[1])其中foo是自定义函数,对于第一个参数,我收到一个元素的列表。如果元素作为变量传递,我将无法获得列表。有没有办法让saxon返回这个/b/a[1]单个元素而不是一个元素的列表?

1 个答案:

答案 0 :(得分:0)

  

如果元素作为变量传递,我将无法获得列表。

据推测,这是一个声明类型的变量,需要一个元素:

<xsl:variable name="theNode" select="/b/a[1]" as="element()" />

我怀疑(我确定Michael Kay会纠正我,如果我错了)当你直接使用表达式/b/a[1]时,它的静态类型被推断为序列类型(例如{{1或者node()*)而不是单个节点,因为在运行时可能表达式无法匹配(例如,如果没有element()*元素)或多个节点(如果有多个节点)在当前树 1 的顶层a,您可以尝试使用“视为”构造来覆盖它:

b

1 是的,如果当前上下文节点是临时树的一部分,这是片段而不是格式良好的文档,例如,这是可能的。 a:foo(/b/a[1] treat as element())