2016-03-05 3 views
1

Какой XPATH Мне нужно извлечь текст внутри SPAN, которому предшествует конкретная метка внутри STRONG, как внутри P?Что XPATH Мне нужно извлечь текст внутри SPAN, которому предшествует конкретная метка внутри STRONG, как внутри P?

Например, чтобы извлечь сайта и адреса электронной почты из страницы, которая выглядит следующим образом:

<p> 
<strong>Website:</strong> 
<span>www.example.com</span> 
</p> 
<p> 
<strong>Contact email:</strong> 
<span>[email protected]</span> 
</p> 
+2

вы можете поделиться немного больше html или фактической ссылкой - я не могу видеть, что класс любых предыдущих тегов так трудно дать ответ –

+0

Последний раз, когда я опубликовал ссылку, и у меня был вопрос на удержание и позже удалил сообщество, думая, что я отправляю рекламу страницы. – Future

ответ

0

Сайт:

//p/span[preceding::strong[1]/text()='Website:'] 

Email:

//p/span[preceding::strong[1]/text()='Contact email:'] 
+0

Спасибо, ваш XPATH сработал! – Future

+0

@Future Это приятно слышать. Теперь выберите ответ, который, по вашему мнению, наилучшим образом ответил на ваш вопрос, и проверьте ✔ рядом с этим ответом. Подробнее об этом этикете читайте здесь (https://stackoverflow.com/help/someone-answers). Когда вы получите достаточную репутацию в будущем, вы также сможете [отменить ответы] (http://stackoverflow.com/help/privileges/vote-up), чтобы дать людям кредит за свои усилия (или [downvote] (http : //stackoverflow.com/help/privileges/vote-down), если вы считаете, что ответ плох). –

1

Это должно сделать:

//p/span[preceding::*[1][self::strong and . = 'Contact email:']] 

Здесь Вы выбираете все p/span элементов с первым предшествующим элементом strong, где меткой является Contact email:

+0

Спасибо, ваш XPATH сработал! – Future

0

Важен также отметить, что при использовании preceding осей, как показано в двух других ответах, то XPath будет ошибочно вернуть span элемент, который формируется как следующее:

<strong>Website:</strong> 
<p> 
<span>www.example.com</span> 
</p> 

Вы можете использовать preceding-sibling оси вместо того, чтобы избежать ошибок, упомянутые выше:

//p/span[preceding-sibling::*[1][self::strong and . = 'Website:']] 

preceding-sibling оси рассматривать только элементы, которые расположены перед тем контекстного элемента (The span в данном случае), и является братом (один и тем же родитель) контекстного элемента.