Как изменить все требуемые значения атрибутов таким образом, который выражен в XML-примерах с помощью Xquery?Изменение всех значений атрибутов элемента с помощью Xquery
Я использую базовый движок Basex 7.6 Xquery и XML. Моя цель до сих пор заключалась в том, чтобы обрабатывать только XML-файлы.
Эта структура у меня уже:
<address ref="file1" title="title1">
<address ref="file1.1" title="title1.1">
<address ref="file1.1.1" title="title1.1.1"/>
</address>
<address ref="file1.2" title="title1.2">
<address ref="file1.2.1" title="title1.2.1"/>
<address ref="file1.2.2" title="title1.2.2">
<address ref="file1.2.2.1" title="title1.2.2.1"/>
<address ref="file1.2.2.2" title="title1.2.2.2"/>
</address>
</address>
</address>
<address ref="file2" title="title2"/>
Но мне нужно иметь, как следующее:
<address ref="mydir/file1" title="title1">
<address ref="mydir/file1.1" title="title1.1">
<address ref="mydir/file1.1.1" title="title1.1.1"/>
</address>
<address ref="mydir/file1.2" title="title1.2">
<address ref="mydir/file1.2.1" title="title1.2.1"/>
<address ref="mydir/file1.2.2" title="title1.2.2">
<address ref="mydir/file1.2.2.1" title="title1.2.2.1"/>
<address ref="mydir/file1.2.2.2" title="title1.2.2.2"/>
</address>
</address>
</address>
<address ref="mydir/file2" title="title2"/>
мне удалось изменить первый элемент так, как я хотел, но все еще может «Правильно, как движок Xquery принимает.
Я изменил первый элемент с помощью этого фрагмента кода в BaseX 7.6, и я не понял, как применить его ко всем элементам.
copy $c :=
(<address ref="file1" title="title1">
<address ref="file1.1" title="title1.1">
<address ref="file1.1.1" title="title1.1.1"/>
</address>
<address ref="file1.2" title="title1.2">
<address ref="file1.2.1" title="title1.2.1"/>
<address ref="file1.2.2" title="title1.2.2">
<address ref="file1.2.2.1" title="title1.2.2.1"/>
<address ref="file1.2.2.2" title="title1.2.2.2"/>
</address>
</address>
</address>
(:<address ref="file2" title="title2"/> WHY IS THIS NOT BY THE WAY ACCEPTED?:)
)
modify (
replace value of node $c/@ref with concat('mydir/', $c/@ref)
)
return $c
информация о том, как я пытался понять эту проблему, можно найти здесь: http://docs.basex.org/wiki/XQuery_Update#Non-Updating_Expressions
Я чувствую себя, что Basex это хороший инструмент для этого. Я просто не могу понять, как это сделать. Я думаю, что рекурсия как-то тоже ответит в этом случае. Тем не менее я не могу понять это из-за моей маленькой неопытности.
Заранее благодарен!
Спасибо! Я знал, что я не далеко от решения, но все-таки нужен последний удар :) – sailfish