如何在XQuery中删除一组标签但仍保留其文本?例如,如果我有:
<root>
<childnode>This is <unwantedtag>some text</unwantedtag> that I need.</childnode>
</root>
如何删除不需要的标记以获取:
<root>
<childnode>This is some text that I need.</childnode>
</root>
实际上,我最终想要的只是文字,例如:
This is some text that I need.
当我执行以下操作时:
let $text := /root/childnode/text()
我明白了:
This is that I need.
它缺少some text
部分。
有关如何退回This is some text that I need.
的任何想法?
谢谢。
答案 0 :(得分:4)
它不是您感兴趣的childnode的字符串值(与文本节点序列或简化元素相对)?您可以从fn:string获取字符串值:
string(/root/childnode)
答案 1 :(得分:2)
使用强>:
/*/childnode//text()
在提供的XML文档上评估此XQuery时:
<root>
<childnode>This is <unwantedtag>some text</unwantedtag> that I need.</childnode>
</root>
产生了想要的正确结果:
This is some text that I need.
答案 2 :(得分:0)
这个XQuery:
declare function local:copy($element as element()) {
element {node-name($element)}
{$element/@*,
for $child in $element/node()
return if ($child instance of element())
then local:match($child)
else $child
}
};
declare function local:match($element as element()) {
if ($element/self::unwantedtag)
then for $child in $element/node()
return if ($child instance of element())
then local:match($child)
else $child
else local:copy($element)
};
local:copy(/*)
输出:
<root>
<childnode>This is some text that I need.</childnode>
</root>