计算空节点和没有特定文本的节点时的 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
我想计算其中没有文本 "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