How to convert text inside a node into child node using xquery update?
xquery, xquery-update
Solution
As you want to replace an element, you should simply use the `replace` construct, instead of inserting the new element and deleting the old one. Seems much simpler to me:
copy $i := $a
modify (
for $x in $i/descendant-or-self::*[exists(*)]/text()
return replace node $x with <childtext>{$x}</childtext>
)
return $i
Problem
I have a xml document like ``` <root> <first> First Level <second> second level <third> Third Level </third> </second> <second2> another second level </second2> </first> </root> ``` How to convert this document with all nodes, that means if a node contains `text` and `child node` convert text into a child node (let's say childtext) using xquery-update ``` <root> <first> <childtext>First Level</childtext> <second> <childtext>second level</childtext> <third> Third Level </third> </second> <second2> another second level </second2> </first> </root> ``` And here is what I tried: ``` 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 ``` I could not delete the text which has sibling node.