Xml 我的xquery在不使用;计数“;适当地
我试图开发一个xml文件的查询,在这里我想计算一些Xml 我的xquery在不使用;计数“;适当地,xml,xquery,Xml,Xquery,我试图开发一个xml文件的查询,在这里我想计算一些calib,其中$y/colheita/cod\u colheita=“FE23569”和$y/colheita/@ano=“2018”,我试图返回返回计数($y/colheita/lotes/lote/calibragem/calib) 我不明白为什么我不返回calibs的数量 XML文件 <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xs
calib
,其中$y/colheita/cod\u colheita=“FE23569”和$y/colheita/@ano=“2018”
,我试图返回返回计数($y/colheita/lotes/lote/calibragem/calib)
我不明白为什么我不返回calibs的数量
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style_macaMoimenta.xsl"?>
<moimenta xmlns="http://www.macamoimenta.pt/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gnr="http://www.macamoimenta.pt/general" xmlns:clt="http://www.macamoimenta.pt/lote"
xmlns:prc="http://www.macamoimenta.pt/precario"
xmlns:clb="http://www.macamoimenta.pt/calibragem"
xsi:schemaLocation="http://www.macamoimenta.pt/ moimenta.xsd">
<produtores>
<produtor>
<codigo>PR001</codigo>
<nome>Antonio Manuel</nome>
<data_registo>2018-03-20</data_registo>
<morada>
<gnr:rua>Rua Antonio Manuel</gnr:rua>
<gnr:numero>69</gnr:numero>
<gnr:cod_postal>4569-123</gnr:cod_postal>
</morada>
<colheita ano="2018" qualidade="Ambrosia">
<cod_colheita>FE23569</cod_colheita>
<valor>
<prc:preco_valor valor="0-60">
<prc:preco>0.10</prc:preco>
</prc:preco_valor>
<prc:preco_valor valor="60-65">
<prc:preco>0.13</prc:preco>
</prc:preco_valor>
<prc:preco_valor valor="65-70">
<prc:preco>0.17</prc:preco>
</prc:preco_valor>
<prc:preco_valor valor="DEFEITO">
<prc:preco>0.05</prc:preco>
</prc:preco_valor>
</valor>
<lotes>
<lote>
<clt:n_lote>236598</clt:n_lote>
<clt:quantidade>2500</clt:quantidade>
<clt:calibragem>
<clb:calib valor="0-60">
<clb:quantidade>1000</clb:quantidade>
</clb:calib>
<clb:calib valor="60-65">
<clb:quantidade>1300</clb:quantidade>
</clb:calib>
<clb:calib valor="DEFEITO">
<clb:quantidade>200</clb:quantidade>
</clb:calib>
</clt:calibragem>
</lote>
</lotes>
</colheita>
</produtor>
</produtores>
我只需要用两个行列式进行这个查询,
cod_colheita=“FE23569”
和$y/colheita/@ano=“2018”
,我需要它返回在colheita/lotes/lote
内完成的calib
的数量,我想你要计数
count(
(for $y in /moimenta/produtores/produtor
where $y/colheita/cod_colheita="FE23569"
and $y/colheita/@ano="2018"
return $y)/colheita/lotes/lote/calibragem/calib
)
或者更短
count(/moimenta/produtores/produtor/colheita[cod_colheita="FE23569" and @ano="2018"]/lotes/lote/calibragem/calib)
如果所有元素都位于相同的默认名称空间中,但由于涉及其他两个名称空间,您需要更多的名称空间声明并使用前缀,则此操作应该有效:
declare default element namespace "http://www.macamoimenta.pt/";
declare namespace clt = "http://www.macamoimenta.pt/lote";
declare namespace clb = "http://www.macamoimenta.pt/calibragem";
count(/moimenta/produtores/produtor/colheita[cod_colheita="FE23569" and @ano="2018"]/lotes/lote/clt:calibragem/clb:calib)
一旦对正确的表达式执行了count
调用,名称空间修复也适用于您最初的尝试:
declare default element namespace "http://www.macamoimenta.pt/";
declare namespace clt = "http://www.macamoimenta.pt/lote";
declare namespace clb = "http://www.macamoimenta.pt/calibragem";
count(
(for $y in /moimenta/produtores/produtor
where $y/colheita/cod_colheita="FE23569"
and $y/colheita/@ano="2018"
return $y)/colheita/lotes/lote/clt:calibragem/clb:calib
)
这很难理解,但是,如果您想使用for
表达式,使用例如
let $colheitas :=
for $y in /moimenta/produtores/produtor/colheita
where $y/cod_colheita="FE23569"
and $y/@ano="2018"
return $y
return count($colheitas/lotes/lote/clt:calibragem/clb:calib)
它不应该给cicle另一个,因为它一直给我0。我期待着3非常感谢,有一个非常重要的问题,我想知道答案。我可以在查询中使用if语句吗?为什么不将XQuery规范标记为书签,并在出现问题时开始搜索?如果您正在寻找声明性语言中的“语句”,您可能从一开始就走错了方向,但是有一个条件表达式。
let $colheitas :=
for $y in /moimenta/produtores/produtor/colheita
where $y/cod_colheita="FE23569"
and $y/@ano="2018"
return $y
return count($colheitas/lotes/lote/clt:calibragem/clb:calib)