繁体   English   中英

Xquery 移除元素

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM