Count XQuery:如何计算元素为空或不存在的数量?

Count XQuery:如何计算元素为空或不存在的数量?,count,xquery,Count,Xquery,我有一个XML文件,其中包含具有以下结构的元素: <root> <listing> <seller_info name="1"/> <auction_info> <notes></notes> </auction_info> </listing> <listing> <s

我有一个XML文件,其中包含具有以下结构的元素:

<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)) )