У меня есть XML-документ, какКак преобразовать текст внутри узла в дочерний узел с помощью обновления xquery?
<root>
<first>
First Level
<second>
second level
<third>
Third Level
</third>
</second>
<second2>
another second level
</second2>
</first>
</root>
Как преобразовать этот документ со всеми узлами, это означает, что если узел содержит text
и child node
преобразовать текст в дочерний узел (скажем childtext) с помощью XQuery-обновления
<root>
<first>
<childtext>First Level</childtext>
<second>
<childtext>second level</childtext>
<third>
Third Level
</third>
</second>
<second2>
another second level
</second2>
</first>
</root>
А вот то, что я пробовал:
let $a :=
<root>
<first>
First Level
<second>
second level
<third>
Third Level
</third>
</second>
<second2>
another second level
</second2>
</first>
</root>
return
copy $i := $a
modify (
for $x in $i/descendant-or-self::*
return (
if($x/text() and exists($x/*)) then (
insert node <childtext>
{$x/text()}
</childtext> as first into $x
(: here should be some code to delete the text only:)
) else()
)
)
return $i
Я не смог удалить текст с узлом сестры.
Сначала я могу создать узел «childtext» со значением text(). Теперь я должен удалить старый текст, который все еще существует> Я не могу удалить этот только этот текст. если я хочу сделать значение пустым, другой дочерний узел также будет удален. –
Вот что я пытался сделать: пусть $ а: = .... возвращение копия $ я: = $ а изменения ( за $ х в $ I/потомок-или-я :: * возврата ( если ($ х/текст() и существует ($ х/*)), а затем ( вставки узла {$ х/текст()} , как первый в $ х, (: здесь надо как-то удалить этот текст или обновление на следующий уровень :) ) еще ( ) ) ) вернуть $ я –
Пожалуйста, измените этот код на свой вопрос (его га rdly читаемый здесь) и не пропускайте части кода, чтобы он больше не запускался ('let $ a: = ....' не является рабочим кодом для уверенности). Какие проблемы у вас есть с вашим текущим кодом? –