请参阅变量中定义的层次结构

时间:2013-11-28 21:26:37

标签: xml return xquery

我刚刚举了一个例子来说明我会问你什么:

=>是否可以创建变量,将数据放入其中,并以与操作路径相同的方式操纵此变量的返回?

以下代码,

  let $variable :=(for $pou in blabla/blabla
     return (element thing {attribute status {data($pou/name)},
     let $thing2 := for $z in $pou/bacon[@status="c"]
        return element thing3 {data($z/code)} return($thing2) })) return()

会做类似

的事情
<thing>
<thing2><thing3></thing3>
</thing2>
</thing>

可以使用“ $ variable / thing2 ”访问之前创建的结构中的标记吗???

  let $variable :=(for $pou in adress/blablalba/adresse/blabla/blabla
     return (element thing {attribute status {data($pou/name)},
     let $thing2 := for $z in $pou/bacon[@status="c"]
        return element thing3 {data($z/code)} return($thing2) })) return($variable/thing2)

在我的真实项目中,我创建了多个在启动时正确显示的变量,但是当我尝试访问/引用它们时它不起作用,我开始相信你不能访问变量中的内容同样的方式?但是我有点卡住了!

我希望你理解我的问题,因为我承认这是非常糟糕的解释

干杯

1 个答案:

答案 0 :(得分:1)

是的,你可以做你想做的事。你得到的错误不是因为你想要做的事情是不可能的,而是因为你的路径表达不正确。

为了说明XPath表达式可以在查询中构造其值的变量中成功导航,请考虑以下查询:

let $variable := <a><b>10</b><b>20</b><b>30</b></a>
return $variable/b[number(.) lt 25]

这将返回b元素的子元素中前两个a元素,即$variable的值。

在您的示例中,您将$variable绑定到一系列thing元素,每个元素都包含一系列thing3元素。然后,您尝试检索一个thing2元素,该元素不可能存在(查询中唯一出现的字符串thing2作为变量的名称)。