我有一个带有节点的函数,如果节点是一组节点的一部分,则返回true或false,例如我有这个xml文档:
<person>
<name> Joseph </name>
<child> Mary </child>
<mother> Janet </mother>
<father> Fred </father>
</person>
我有一个函数应该返回true如果传入的节点是父亲或名称它应该返回true但我收到此错误 此处不能使用Axis step child :: element:上下文项不存在
我不确定我在这里做错了什么
declare function local:findNode($node as element())
{
for $s in person/(name,father)
return
if($s = $node)
then true()
else false()
};
答案 0 :(得分:1)
在您的函数中,表达式person/(name,father)
没有上下文。更新函数以将person元素作为变量接受,并将其用作上下文:$person/(name, father)
。
此外,因为这会使用(name, father)
迭代for
序列,所以该函数将返回多个布尔变量 - 一个用于name
,另一个用于father
。如果将值序列与传入值进行比较,如果序列的任何值的计算结果为true,则返回true;如果它们全部为false,则返回false,这听起来像你想要的:
declare function local:findNode(
$node as element(),
$person as element(person)
) as xs:boolean
{
$person/((name, father)=$node)
};
let $person :=
<person>
<name> Joseph </name>
<child> Mary </child>
<mother> Janet </mother>
<father> Fred </father>
</person>
let $node := <name> Rick </name>
return local:findNode($node, $person)