Count XQuery:如何计算元素为空或不存在的数量?
我有一个XML文件,其中包含具有以下结构的元素:Count XQuery:如何计算元素为空或不存在的数量?,count,xquery,Count,Xquery,我有一个XML文件,其中包含具有以下结构的元素: <root> <listing> <seller_info name="1"/> <auction_info> <notes></notes> </auction_info> </listing> <listing> <s
<root>
<listing>
<seller_info name="1"/>
<auction_info>
<notes></notes>
</auction_info>
</listing>
<listing>
<seller_info name="2"/>
<auction_info>
<notes></notes>
</auction_info>
</listing>
<listing>
<seller_info name="3"/>
<auction_info>
</auction_info>
</listing>
<listing>
<seller_info name="4"/>
<auction_info>
<notes>ABC</notes>
</auction_info>
</listing>
<listing>
<seller_info name="5"/>
<auction_info>
<notes>ABC</notes>
<notes>DEF</notes>
</auction_info>
</listing>
它返回1 1 0。我尝试添加一个求和函数,但没有任何用处。错误在哪里?感谢您的帮助。问题是您正在迭代一个可能不存在的元素(
)
相反,继续迭代您的列表,并测试每个列表是否包含注释:
fn:sum(
for $x in //listing
return
if (fn:empty($x/auction_info/notes))
then 1
else 0)
通过将fn:empty()
的布尔结果强制转换为xs:integer
,可以进一步简化此过程:
fn:sum(
for $x in //listing
return xs:integer(fn:empty($x/auction_info/notes)))
甚至移除循环:
fn:sum( //listing/xs:integer(fn:empty(./auction_info/notes)) )
fn:sum( //listing/xs:integer(fn:empty(./auction_info/notes)) )