【问题标题】:Construct Namespaced Xml with Contained XPath Expression使用包含的 XPath 表达式构造命名空间 Xml
【发布时间】:2014-04-29 01:42:03
【问题描述】:

我正在尝试创建 XQuery 代码,该代码构造一个命名空间的 xml 元素并将现有(非命名空间)元素的文本插入其中。下面的代码是一个简化的例子:

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 构造(元素 () {...})也可以正常工作。这个问题似乎只发生在正在构造的 xml 被赋予命名空间时。第一个代码sn-p有什么问题?

【问题讨论】:

标签: xml xpath xquery marklogic


【解决方案1】:

通过 xmlns 伪属性提供命名空间会更改嵌套 XQuery 范围内的默认元素命名空间。你可以通过使用命名空间前缀来解决这个问题,

declare namespace ns = "http://www.blah.org";
let $xml := <wrapper><elem>textIWant</elem></wrapper>
return <ns:newElem>{ $xml/elem/text() }</ns:newElem>

或使用“任何命名空间”XPath 语法:

$xml/*:elem/text()

【讨论】:

  • 这完全正确。经验法则:如果代码看起来是正确的,特别是如果它在一个上下文中工作而不是在另一个上下文中工作,并且您没有得到任何结果,那么它可能是命名空间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 2011-04-25
  • 1970-01-01
相关资源
最近更新 更多