使用命名空间重命名节点

时间:2015-08-16 21:10:14

标签: xml xquery

嗨我的命名空间有问题

我的XML如下:

<earnings xmlns="http://www.dppvgu.com" currency="USD">
  <distribution>15002111</distribution>
  <ticket_sales>
    <distribution num="2">24450144</distribution>
    <distribution num="3">12057133</distribution>
  </ticket_sales>
  <digital_sales>
    <ppv_sales>19220907</ppv_sales>
    <stream_sales>49725265</stream_sales>
    <disc_sales>15082021</disc_sales>
  </digital_sales>
</earnings>

我想使用以下命令重命名节点<distribution>15002111</distribution>

for $doc in doc("earnings.xml")/*[local-name() = 'earnings']/*[local-name() = 'distribution']
return rename node $doc as 'postbox'

我收到以下错误:[XUDY0023] Conflicts with existing namespaces.

如何解决此问题?请帮忙

1 个答案:

答案 0 :(得分:1)

尝试使用QName()指定默认命名空间中的新名称:

for $doc in doc("earnings.xml")/*[local-name() = 'earnings']/*[local-name() = 'distribution']
return rename node $doc as QName('http://www.dppvgu.com','postbox')

或将QName()namespace-uri()结合使用以避免对命名空间进行硬编码:

for $doc in doc("earnings.xml")/*[local-name() = 'earnings']/*[local-name() = 'distribution']
return rename node $doc as QName(namespace-uri($doc),'postbox')