2014-02-27 4 views
2

Мне нужно найти количество тегов на основе состояния.xpath count с условием

<A> 
    <B><C>99</C></B> 
    <B><C>96</C></B> 
    <B><C>98</C></B> 
    <B><C>95</C></B> 
    <B><C>99</C></B> 
</A> 

я придумал это далеко

count(//*A/B/C/[text() = '99' | text() = '98']) 

Ожидаемый результат будет 3

Я не являюсь экспертом в XPath, любая помощь будет оценена.

ответ

1

Попробуйте так:

count(/A/B/C[text() = '99' or text() = '98']) 

* означает любой элемент. Он будет работать с /*/B, потому что A - это элемент. [] означает предикат, который ограничивает узел, к которому он применяется. Поскольку он применяется к C, вы не используете разделитель путей между C и предикатом. // означает потомок или сам. Поскольку ваш корень равен A, это не имеет значения, если вы используете // или /. Если вы не заботитесь о контексте и просто хотел, чтобы сосчитать все C с в документе, независимо от того, где они находятся в дереве можно также использовать:

count(//C[text() = '99' or text() = '98']) 

Если были какие-либо C с в других частях документа они также будут учитываться. Когда это не имеет никакого значения, как и в вашем случае, более эффективно писать полный путь.

+0

Спасибо, он отлично работает. – ehsan

+1

Вы можете упростить это далее: 'count (// C [text() = ('99', '98')])' – adamretter

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