我们假设我有一个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"}
};
提前感谢您的帮助和建议。
答案 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"}
};