Попробуйте так:
count(/A/B/C[text() = '99' or text() = '98'])
*
означает любой элемент. Он будет работать с /*/B
, потому что A
- это элемент. []
означает предикат, который ограничивает узел, к которому он применяется. Поскольку он применяется к C
, вы не используете разделитель путей между C
и предикатом. //
означает потомок или сам. Поскольку ваш корень равен A
, это не имеет значения, если вы используете //
или /
. Если вы не заботитесь о контексте и просто хотел, чтобы сосчитать все C
с в документе, независимо от того, где они находятся в дереве можно также использовать:
count(//C[text() = '99' or text() = '98'])
Если были какие-либо C
с в других частях документа они также будут учитываться. Когда это не имеет никакого значения, как и в вашем случае, более эффективно писать полный путь.
Спасибо, он отлично работает. – ehsan
Вы можете упростить это далее: 'count (// C [text() = ('99', '98')])' – adamretter