Не используйте вложенные одинарные кавычки:
xmllint --xpath '/prova/parent/groupId/text()[contains(.,"ok")]' test.xml
результат
XPath set is empty
Объяснение:
Оболочка видит '/prova/parent/groupId/text()[contains(.,'ok')]'
as
/prova/parent/groupId/text()[contains(.,ok)]
В этом XPath ok
интерпретируется как имя элемента. Элемент <ok>
не существует, поэтому он выбирает пустой набор узлов.
Ради contains()
пустой набор узлов преобразуется в пустую строку. И любая строка содержит пустую строку, поэтому условие всегда выполняется.