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



我想统计所有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

最新更新