XPath для выбора элементов без дочерних элементов?

<div>
<p> text 1 </p> 
<p>
    <a href = "http://www.google.com">text 2</a>
</p> 
<p> text 3  </p> 
<p> text 4 </p> 
</div>

Я использовал это: //p, но это также дает мне <p>, где text 2. Я хочу <p> без детей. Мне нужно: text 1, text 3, text 4

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот XPath для различных интерпретаций отсутствия детей...

  • Нет дочерних элементов:

    //p[not(*)]
    
  • Нет текстовых детей:

    //p[not(text())]
    
  • Нет детей любого типа:

    //p[not(node())]
    

Замените p выше на любое другое имя элемента или * на целевые элементы независимо от имени.

Чтобы добавить дополнительную альтернативу, вы также можете использовать //p[text()[normalize-space()]], чтобы получить желаемый результат

Siebe Jongebloed 22.10.2022 12:25

@SiebeJongebloed: Да, в то время как //p[not(*) выбирает отсутствие дочерних элементов (одна интерпретация запрошенного «нет дочерних элементов»), ваш XPath выбирает наличие дочерних текстовых узлов (не только пробелов). Таким образом, //p[not(*)] будет исключать p элементы с смешанным содержимым, тогда как ваш XPath также будет включать p элементы со смешанным содержимым.

kjhughes 22.10.2022 14:53

Другие вопросы по теме