我正在尝试创建构造命名空间的xml元素的XQuery代码,并将现有(非命名空间)元素中的文本插入其中。以下代码是一个简化示例:
xquery version "1.0-ml";
let $xml := <wrapper><elem>textIWant</elem></wrapper>
return <newElem xmlns="http://www.blah.org">{$xml/elem/text()}</newElem>
而不是产生所需的输出:
<newElem xmlns="http://www.blah.org">textIWant</newElem>
它产生了这个:
<newElem xmlns="http://www.blah.org"/>
但是,此代码有效:
xquery version "1.0-ml";
let $xml := <wrapper><elem>textIWant</elem></wrapper>
let $elemText := $xml/elem/text()
return <newElem xmlns="http://www.blah.org">{$elemText}</newElem>
使用其他形式的xml构造(element(){...})也可以正常工作。只有在构造的xml被赋予命名空间时才会出现这个问题。第一个代码段有什么问题?
答案 0 :(得分:4)
通过xmlns
伪属性提供命名空间会更改嵌套XQuery范围中的默认元素命名空间。您可以使用名称空间前缀
declare namespace ns = "http://www.blah.org";
let $xml := <wrapper><elem>textIWant</elem></wrapper>
return <ns:newElem>{ $xml/elem/text() }</ns:newElem>
或使用“any namespace”XPath语法:
$xml/*:elem/text()