declare function local:stripNS($name as xs:string?)
as xs:string?
{
if(contains($name, ':'))
then substring($name, functx:index-of-string($name, ':') + 1)
else $name
};
for $x in doc("test.xml")//*[@ref]
let $tmp:=local:stripNS($x/@ref)
return replace value of node $x/@ref with $tmp
Я хочу, чтобы лишить имена от значения ref
и type
атрибута. SO <test ref='haha:123' type='hehe:456'/>
должно стать <test ref='123' type='456'/>
. Я не знаю, правильный синтаксис, ниже идеальный .xqy файл Я хочу:Basex: правильный синтаксис, чтобы разместить несколько «заменить»
declare function local:stripNS($name as xs:string?)
as xs:string?
{
if(contains($name, ':'))
then substring($name, functx:index-of-string($name, ':') + 1)
else $name
};
for $x in doc('test.xml')//*[@ref]
let $tmp:=local:stripNS($x/@ref)
return replace value of node $x/@ref with $tmp,
for $x in doc('test.xml')//*[@type]
let $tmp:=local:stripNS($x/@type)
return replace value of node $x/@ref with $tmp
Но, очевидно, он содержит синтаксическую ошибку:
[XUDY0017] Node can only be replaced once: attribute ref {"123"}.
$ basex -u test.xqy
Используйте команду выше контрольная работа. Выход будет записан обратно в test.xml
.
Пожалуйста, всегда указывайте пример ввода. Делает жизнь проще для тех, кто отвечает на вопросы, и дает ответы, лучше отвечающие вашей реальной проблеме взамен. –
@JensErat У вас уже есть это. Просто скопируйте и вставьте ' ' в локальный файл с именем 'test.xml' –
Действительно. Еще одна важная вещь, которую вы пропустили: ** всегда ** включайте сообщение об ошибке, если вы его получите. Если бы вы отправили сообщение об ошибке, возможно, большинство пользователей XQuery здесь заметили бы проблему сразу, даже не скопировав код. –