xs:string作为XQuery中的element()

时间:2014-08-05 10:32:24

标签: xpath xquery

我们假设我有一个XML文件,如下所示:

<SampleF>
  <FirstNode AAA="Something" BBB="Something"></FirstNode>
  <SecondNode CCC="Random" DDD="Random"></SecondNode>
</SampleF>

第二个是这样的:

<SampleF2>
  <FirstNode>
    <AAA>Something</AAA>
    <BBB>Random</BBB>
  </FirstNode>
</SampleF2>

我想从两个(AAA =“Something”/ Something)获得element()。我该如何转换它?在第一种情况下,我得到xs:string,在第二种document-node()

我为第一个例子制作了这样的东西,但我100%肯定有更好的方法来做到这一点

declare function getElementFirstExample($message) as element() {
let $name := "AAA"
let $value := $message/*:SampleF1/*:FirstNode/@AAA
return element {$name} {"$value"}
};

提前感谢您的帮助和建议。

1 个答案:

答案 0 :(得分:2)

据我了解,您需要<FirstNodes/> s AAA属性或子元素的值,无论它是否在元素或属性中。

使用备用轴步骤访问属性和元素,使用data(...)检索字符串值。

data(//FirstNode/(@AAA, AAA))

将它们放在一起用于您的功能和明确的用例:

declare function getElementFirstExample($message) as element() {
  let $name := "AAA"
  let $value := data($message/*:SampleF1/*:FirstNode/(@AAA, *:AAA))
  return element {$name} {"$value"}
};