【发布时间】:2014-02-01 00:03:19
【问题描述】:
我有一个类似的 xml 文档
<root>
<first>
First Level
<second>
second level
<third>
Third Level
</third>
</second>
<second2>
another second level
</second2>
</first>
</root>
如何使用所有节点转换此文档,这意味着如果节点包含 text 和 child node 使用 xquery-update 将文本转换为子节点(比如说 childtext)
<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”。现在我必须删除仍然存在的旧文本> 我不能只删除这个文本。如果我想让 value 为空,其他子节点也将被删除。
-
这是我尝试做的: let $a := .... return copy $i := $a modify ( for $x in $i/descendant-or-self::* return ( if($x/text() and exists($x/*)) then ( insert node
{$x/text()} as first into $x, (: 这里应该以某种方式删除此文本或更新到下一个级别:) ) else ( ) ) ) return $i -
请根据您的问题编辑此代码(此处难以阅读),并且不要省略部分代码,使其不再运行(
let $a := ....肯定没有工作代码)。您当前的代码有什么问题? -
完成!!请再次检查问题
-
@dirkk:如果帖子有问题,请详细描述问题,而不是仅仅发布“你试过什么”。请参阅this Meta post,了解“您尝试过什么”cmets 是否可以接受以及“您尝试过什么”的替代方案。谢谢!
标签: xquery xquery-update