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

时间:2016-04-01 20:45:42

标签: xml count xquery nodes exist-db

我想要计算其中没有“未指定”文字的所有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,正如我所期待的那样,

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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