Хобрук: Ваш путь к мастерству в программировании

XPath для текста по ссылке?

Можете ли вы помочь мне написать относительный XPath для приведенного ниже HTML, чтобы получить текст параграфа 'You are an employer' на основе ссылки 'Emp':

<div class = "dummy">
<h2 class="dummy2">
<a class="dum3" href="/model/login/">Emp</a>
</h2>
<p class="govuk-body">You are an employer</p>
18.10.2019

  • Добро пожаловать в Stack Overflow. В будущем вы должны обязательно включить попытку (что вы пробовали), описание того, что получилось, и что вы хотели, чтобы произошло. (Предыдущее отрицательное голосование, которое вы получили, вероятно, было связано с отсутствием этого в вашем первом посте.) 18.10.2019

Ответы:


1

Это должно получить текст - You are an employer.

//a[contains(text(),'Emp')]/parent::*/following-sibling::p/text()
18.10.2019
  • Рад видеть улучшение по сравнению с моим существующим ответом, но это даже не близко: зачем использовать сдерживание подстроки? Это может привести к совпадению и с Employer, или с Empathy, ... Зачем использовать подстановочный знак в имени элемента? Он может легко соответствовать p или div или ..., не говоря уже о том, что он будет соответствовать строковым значениям любого элемента в документе. Зачем без необходимости переходить к родителю только для того, чтобы использовать ось following-sibling, а не просто использовать ось following? 18.10.2019
  • @kjhughes, вы правы, это может соответствовать чему угодно с надписью «Emp». Я обновил ответ, чтобы найти только элемент «а». Причина использования родного брата, потому что я не хочу использовать индекс p[1]. Я считаю, что использование индекса ненадежно, если есть несколько ps. В нашем случае мы заботимся о местонахождении непосредственного брата. 18.10.2019
  • Не брезгуйте p[1] здесь; на самом деле, без него также может быть выбрано несколько p по заданной оси. (Возможно, вы неправильно применяете эту проблему относительно выбора первого в документе и первого дочернего элемента.) Кстати, используйте p[1], чтобы выбрать первый p по оси; используйте *[1][self::p], чтобы получить непосредственный элемент, который тогда должен быть p. 19.10.2019

  • 2

    Этот XPath,

    //a[.="Emp"]/following::p[1]/text()
    

    выберет текст первого p, следующего за a, со строковым значением "Emp".

    18.10.2019

    3

    Я бы прошел по дереву, используя XPATH, как это

    //a[text() = 'Emp']//..//../p

    or

    //*[. = 'Emp']//..//../p

    20.10.2019
    Новые материалы

    Мой процесс подачи заявки в Школе программного обеспечения и дизайна Тьюринга
    Мой последний пост на Medium был в конце августа, и в нем я пообещал написать еще раз, рассказывая историю моего процесса подачи заявки в Школу программного обеспечения и дизайна Тьюринга ...

    Генерация ваших собственных удивительных QR-кодов с использованием Python
    QR-код (код быстрого ответа) — это разновидность матричных штрих-кодов (или двумерных штрих-кодов), изобретенных в 1994 году японской автомобильной компанией Denso Wave . Штрих-код —..

    Прогресс в технологии Трансформеров часть 3
    Многомасштабный управляющий сигнальный преобразователь для бесфазного синтеза движения (arXiv) Автор: Линтао Ван , Кун Ху , Лей Бай , Юй Дин , Ваньли Оуян , Чжиюн Ван . Аннотация:..

    Представляем поддержку компонентов Vue.js. Мгновенный HMR и многое другое.
    Хотя у FuseBox уже был плагин Vue, он был базовым и не имел многих функций, которые делали работу с Vue.js такой приятной. Однако с этим выпуском мы рады сообщить, что в FuseBox..

    Приключения в Javascript, часть 1
    Я продолжаю думать о том, чтобы писать больше, но чем больше я думаю об этом, тем меньше я это делаю. Итак, сегодня я перестал думать и начал писать. Отсюда можно только спускаться… В..

    Понимание дженериков в TypeScript: подробное руководство
    Введение TypeScript, строго типизированный надмножество JavaScript, хорошо известен своей способностью улучшать масштабируемость, удобочитаемость и ремонтопригодность приложений. Одной из..

    Учебные заметки JavaScript Object Oriented Labs
    Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..