получите количество тегов span только в первом div с помощью xpath

#java #xpath #xpath-2.0

Вопрос:

Я хочу подсчитать количество lt;span class="show-for-sr"gt; только в первом div.

Мой текущий xpath возвращает количество промежутков между несколькими div. Я попробовал ниже двух xpath, и они не работают. Почему, когда я передаю [1] для обозначения первого div, он все равно подсчитывает промежутки между всеми элементами div ?

1.

 count(//div[@class='rating-container']//span[@class='show-for-sr'])  
 count(//div[@class='rating-container'][1]//span[@class='show-for-sr'])  

HTML :

 lt;divgt;  lt;div class="cell small-12 medium-12 large-6"gt;  lt;div class="rating-container"gt;  lt;span class="text-blue-500 mr-8"gt;  lt;div class="tt-container"gt;lt;button  aria-label="open tooltip" class="button link" type="button" role="tooltip"  aria-expanded="false"gt;Morningstar ratinglt;/buttongt;lt;/divgt;  lt;/spangt;  lt;spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;/spangt;  lt;/divgt;  lt;/divgt;  lt;div class="cell mb-32"gt;  lt;p class="intro morningstarInfo text-center-mob"gt;Morningstar  Ratinglt;supgt;TMlt;/supgt; (relative to category)  lt;/pgt;  lt;table class="table striped" id="morningstar-info-table"gt;  lt;thead class=""gt;  lt;trgt;  lt;th scope="col" id="year" class=""gt;Yearlt;/thgt;  lt;th scope="col" id="morningstar return" class=""gt;Morningstar returnlt;/thgt;  lt;th scope="col" id="morningstar risk" class=""gt;Morningstar risklt;/thgt;  lt;th scope="col" id="morningstar rating" class=""gt;Morningstar ratinglt;/thgt;  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  lt;trgt;  lt;tdgt;3 - yearlt;/tdgt;  lt;tdgt;Highlt;/tdgt;  lt;tdgt;Lowlt;/tdgt;  lt;tdgt;  lt;div class="rating-container"gt;lt;span  class="text-blue-500 mr-8"gt; lt;/spangt;lt;spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;/spangt;lt;/divgt;  lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;5 - yearlt;/tdgt;  lt;tdgt;Highlt;/tdgt;  lt;tdgt;Lowlt;/tdgt;  lt;tdgt;  lt;div class="rating-container"gt;lt;span  class="text-blue-500 mr-8"gt; lt;/spangt;lt;spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;/spangt;lt;/divgt;  lt;/tdgt;  lt;/trgt;  lt;trgt;  lt;tdgt;Overalllt;/tdgt;  lt;tdgt;Highlt;/tdgt;  lt;tdgt;Lowlt;/tdgt;  lt;tdgt;  lt;div class="rating-container"gt;lt;span  class="text-blue-500 mr-8"gt; lt;/spangt;lt;spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;span  class="icon fil-icon star-grey fil-icon-star-filled"gt;lt;span  class="show-for-sr"gt;star-filledlt;/spangt;lt;/spangt;lt;/spangt;lt;/divgt;  lt;/tdgt;  lt;/trgt;  lt;/tbodygt;  lt;/tablegt;  lt;/divgt; lt;/divgt;  

Ответ №1:

Вместо

 count(//div[@class='rating-container'][1]//span[@class='show-for-sr'])  

используйте это

 count((//div[@class='rating-container'])[1]//span[@class='show-for-sr'])  

Вы должны обернуть весь div в индексирование.