2016-04-01 1 views
0

Я хочу подсчитать все элементы r, которые не содержат в тексте «неуказанных».Проблема XQuery при подсчете пустых узлов и узлов, которые не имеют определенного текста (ne)

Я используя следующий запрос XQuery:

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

Переменная $r_nodes дает мне 4 не 6 как я ожидал,

ответ

1

Вы можете использовать string() или даже более компактным, . вместо text() правильно считать элемент, который не содержит какой-либо текстовый узел:

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

Вы пытаетесь сравнить эффективное значение строки из текстовые узлы (следовательно, text()). Любой пустой элемент не будет иметь текстовый узел. Поэтому вместо того, чтобы ваш запрос должен выглядеть следующим образом:

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

Таким образом, вы сравниваете значение эффективной строки из r элемента, а не это текстовые узлы.

+0

Спасибо за редактирование, так как я могу получить 6 вместо 4 ? –

+0

См. Мой ответ! Это даст вам «6». – adamretter

+1

Я думаю, используя string() вместо text() ??? , Я тестировал его, и это, похоже, решает мою проблему. –

Смежные вопросы