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