在XQuery中,xs:string作为一个元素使用是什么意思?

3
假设我有一个 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()
对于第一个例子,我已经写了以下代码,但我确信有更好的方法来完成这个任务。
declare function getElementFirstExample($message) as element() {
let $name := "AAA"
let $value := $message/*:SampleF1/*:FirstNode/@AAA
return element {$name} {"$value"}
};

感谢您提前提供帮助和建议。
谢谢。
1个回答

2

据我所理解,您想获取<FirstNodes/>元素的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"}
};

非常感谢,这正是我所需要的! :) - Mateusz Chrzaszcz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接