从XML文件中删除属性为OnlyChannels=&print;的所有元素的XQuery [英] XQuery to remove all elements with attribute onlyChannels="print" from XML file
本文介绍了从XML文件中删除属性为OnlyChannels=&print;的所有元素的XQuery的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
onlyChannels="print"
的所有元素
onlyChannels="print"
元素可以位于不同级别的任何位置。
输入XML
<?xml version="1.0" encoding="UTF-8"?>
<abstractGroup>
<abstract type="main" xml:lang="en">
<title type="main">Abstract</title>
<p>900 000 ha along the test of north</p>
<p onlyChannels="print">Abstract</p>
</abstract>
<abstract onlyChannels="online" type="main" xml:lang="es">
<title type="main">Resumen</title>
<p>La orsdft de los trópifdaa</p>
</abstract>
<full type="main" xml:lang="en">
<p onlyChannels="print">full</p>
<p>900 000 ha along the test of north‐east</p>
<doc>
<p onlyChannels="print"> do not print</p>
<p> print </p>
</doc>
</full>
</abstractGroup>
预期的输出XML
<abstractGroup>
<abstract type="main" xml:lang="en">
<title type="main">Abstract</title>
<p>900 000 ha along the test of north</p>
</abstract>
<abstract onlyChannels="online" type="main" xml:lang="es">
<title type="main">Resumen</title>
<p>La orsdft de los trópifdaa</p>
</abstract>
<full type="main" xml:lang="en">
<p>900 000 ha along the test of north‐east</p>
<doc>
<p> print </p>
</doc>
</full>
</abstractGroup>
我正在尝试此XQuery,但它只删除了第一级中的元素,并且没有XML标记。
let $root:= abstractGroup/*/*[not(self::*/@onlyChannels="print")]
return $root
我得到的:
Abstract 900 000 ha along the test of north Resumen La orsdft de los trópifdaa 900 000 ha along the test of north‐east do not print print
如何打印XML标记并删除具有属性的所有元素Channels=&Quot;Print&Quot;
推荐答案
您可以通过recursive typeswitch function运行它来转换xml:
declare function local:filter($nodes as node()*) as node()*
{
for $n in $nodes return
typeswitch ($n)
case element () return
if ($n[@onlyChannels="print"])
then local:filter($n/node())
else element { node-name($n) } { $n/@*, local:filter($n/node())}
default return $n
};
let $doc :=
<abstractGroup>
<abstract type="main" xml:lang="en">
<title type="main">Abstract</title>
<p>900 000 ha along the test of north</p>
<p onlyChannels="print">Abstract</p>
</abstract>
<abstract onlyChannels="online" type="main" xml:lang="es">
<title type="main">Resumen</title>
<p>La orsdft de los trópifdaa</p>
</abstract>
<full type="main" xml:lang="en">
<p onlyChannels="print">full</p>
<p>900 000 ha along the test of north‐east</p>
<doc>
<p onlyChannels="print"> do not print</p>
<p> print </p>
</doc>
</full>
</abstractGroup>
return local:filter($doc)
这篇关于从XML文件中删除属性为OnlyChannels=&print;的所有元素的XQuery的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文