用于检查xml文件中是否存在节点的函数

时间:2013-10-14 20:05:21

标签: xquery

我有一个带有节点的函数,如果节点是一组节点的一部分,则返回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()
    };

1 个答案:

答案 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)