我有这样如何使用xquery更新将节点内的文本转换为子节点?
<root>
<first>
First Level
<second>
second level
<third>
Third Level
</third>
</second>
<second2>
another second level
</second2>
</first>
</root>
如何使用所有节点这个文件,这意味着如果一个节点包含text
和child node
文本转换成一个子节点转换XML文档(让我们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
我无法删除具有兄弟节点的文本。
首先,我可以用值text()创建节点“childtext”。现在我必须删除那些仍然存在的旧文本>我不能删除这个文本。如果我想让空值的其他子节点也将被删除。 –
这里我试图做的: 让$一个:= .... 回报 副本$ I:= $一个 修改( 为$ X $中的I /后裔或自身:: * 回报( 如果($ X /文()和存在($ X/*)),然后( 插入节点 {$ X /文()} 作为第一个进入$ X, (:这里应该以某种方式删除此文本或更新到一个新的水平:) )其他( ) ) ) 返回$ I –
请编辑该代码你的问题(其公顷这里是可读的),并且不要忽略代码的一部分,因此它不再运行('let $ a:= ....'当然没有工作代码)。你现在的代码有什么问题? –