#html #xml #postgresql #parsing #xpath
Вопрос:
Я имею дело со столбцом, в котором просто хранятся теги HTML href в формате, показанном ниже. Кроме тегов href, других тегов нет.
<a href='https://www.website1.ca/en/Section1/Section2/Section3/Section-4---Section5-R-Zone.pdf'>B4</a>
Я пытаюсь извлечь ссылку из HTML-тега: https://www.website1.ca/en/Section1/Section2/Section3/Section-4—Section5-R-Zone.pdf
Я не уверен, какое выражение Xpath использовать. Я попытался использовать следующее, чтобы получить значение внутри атрибута HTML, но, похоже, это не работает.
select
xpath(
'/href',
$<a href='https://www.website1.ca/en/Section1/Section2/Section3/Section-4---Section5-R-Zone.pdf'>B4</a>$,
'/@href'
);
Существует ли выражение xpath для получения значения внутри атрибута HTML?
Ответ №1:
Ваш запрос XPATH неверен. Используйте этот запрос, чтобы получить все href
атрибуты всех a
тегов:
SELECT xpath(
'//a/@href',
$<a href='https://www.website1.ca/en/Section1/Section2/Section3/Section-4---Section5-R-Zone.pdf'>B4</a>$
);
xpath
═════════════════════════════════════════════════════════════════════════════════════════
{https://www.website1.ca/en/Section1/Section2/Section3/Section-4---Section5-R-Zone.pdf}
(1 row)
В результате получается массив со всеми результатами (таких тегов может быть несколько).
Комментарии:
1. Спасибо за ответ! Что делать, если есть два атрибута href, которые необходимо проанализировать. Есть ли способ сделать все одно в запросе? Например: <a href=’ B4 website1.ca/en/Section1/Section2/Section3/… >, ><a href=’ (26) website2.ca/en/section1/section2/section3/… >. Есть ли способ получить два URL-адреса, например: ‘ website1.ca/en/Section1/Section2/Section3/… ‘ КАК URL1 И ‘ website2.ca/en/section1/section2/section3/… ‘ КАК URL2.
2. Это будет работать просто отлично и вернет оба значения. Если вам не нужен массив, используйте
unnest
.