2015-08-16 2 views
0

Привет У меня есть проблема с пространствами именпереименовании узел с пространством имен

Мой 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

Попробуйте использовать 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') 
+0

Привет, спасибо , Но что, если у меня есть несколько «заработка» в XML-файле с разными пространствами имен? –

+1

@DhirajEadara В этом случае вы можете заменить твердое пространство имен на 'namespace-uri ($ doc)' – har07

+0

Большое спасибо. Это работает –