[英]Xquery remove element
我有以下代码:
<?xml version="1.0" encoding="UTF-8"?>
<informacao xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="informacao.xsd">
<num_individuos>2</num_individuos>
<morada>
<pais>Portugal</pais>
<cidade_origem>Penafiel</cidade_origem>
</morada>
<pessoas>
<pessoa>
<nome>pessoa1</nome>
<data_nascimento>2021-12-29</data_nascimento>
</pessoa>
<pessoa>
<nome>pessoa2</nome>
<data_nascimento>2021-12-29</data_nascimento>
</pessoa>
</pessoas>
<preferencia_dias>
<dia>2021-09-16</dia>
<dia>2021-09-17</dia>
<dia>2021-09-18</dia>
</preferencia_dias>
</informacao>
以及以下数据库: Basex DB
如果同一天数据库上的计数小于 2 或者它们不在数据库上,我想保留这些元素。
基于此,结果将是: <preferencia_dias> <dia>2021-09-18</dia> </preferencia_dias>
编辑:开发的代码:
declare function page:filter_counterDays($days){
for $pub in distinct-values(db:open("visitas")//data)
order by $pub ascending
let $count := count(db:open("visitas")//data[. eq $pub])
for $day at $pos in $days//dia
order by $day ascending
return if (($day eq $pub))then(
if($count=2)then(
remove($days//dia,$pos)
)else()
)else(
)
};
这段代码只有在只有 2 个元素时才能正常工作,我知道用 3 个元素进行了测试,结果最终是
<dia>2021-09-17</dia>
<dia>2021-09-18</dia>
<dia>2021-09-16</dia>
<dia>2021-09-18</dia>
而不是<dia>2021-09-18</dia>
我认为你可以做到
declare function local:filter_counterDays($days){
let $pubs := for $data in db:open("visitas")//data
group by $pub := $data
where count($data) lt 2
return $pub
return (
copy $mdays := $days
modify delete node $mdays//dia[. = $pubs]
return $mdays//dia
)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.