计算空节点和没有特定文本的节点时的 XQuery 问题 (ne)

XQuery issue when counting empty nodes and nodes that don't have a specific text (ne)

我想计算其中没有文本 "unspecified" 的所有 r 个元素。

<!-- test.xml -->
<e>
<r/>
<r/>
<r>hi</r>
<r>there</r>
<r>you</r>
<r>all</r>
<r>unspecified</r>
<r>unspecified</r>
</e>

我正在使用以下 XQuery:

let $r_nodes := count(doc('test.xml')//r[text() ne 'unspecified'])
return
  $r_nodes

$r_nodes 变量给我 4 而不是我预期的 6

您正在尝试比较文本节点的有效字符串值(因此text())。任何空元素都不会有文本节点。因此,您的查询应该如下所示:

let $r_nodes := count(doc('test.xml')//r[text() ne 'unspecified'])
return
  $r_nodes

通过这种方式,您可以比较 r 元素的 有效字符串值 而不是它的文本节点。

您可以使用 string() 或更紧凑的 . 而不是 text() 来正确考虑不包含任何文本节点的元素:

let $r_nodes := count(doc('test.xml')//r[. ne 'unspecified'])
return
  $r_nodes