2016-02-20 2 views
-1

У меня есть два различных страниц HTML, которые содержат:Уникальный XPath для двух страниц

<div class="test"> 
    <ul> 
     <li><b>Part 1</b>Lorem ipsum dolor sit amet,</li> 
     <li><b>Part 2</b>consectetur adipisci elit, 
     <br> sed eiusmod tempor incidunt ut labore 
     <br> et dolore magna aliqua.</li> 
    </ul> 
</div> 

и

<div class="test"> 
    <b>Part 1</b>Lorem ipsum dolor sit amet, 
    <br> <b>Part 2</b>consectetur adipisci elit, 
    <br> <b>Part 3</b>sed eiusmod tempor incidunt ut labore et dolore magna aliqua. 
</div> 

Мне нужен уникальный XPath, который работает с любым, и что экстракты

"consectetur adipisci elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua." 

в первом случае и

"sed eiusmod tempor incidunt ut labore et dolore magna aliqua." 

во втором.

+0

Помогли ли бы downvoters объяснить, как этот вопрос непонятен или непонятен? Это хорошо объяснено (и самодостаточно), в отличие от многих вопросов XPath против HTML. – kjhughes

+0

@kjhughes Мое предположение было бы «потому что в нем нет никаких указаний на то, что ОП на самом деле пытался решить проблему сам». – Tomalak

ответ

1

План: Выберите элементы под тест div, которые содержат дочерний узел текста, который начинается с "Part", а затем выберите все следующие текстовые узлы брат и сестра.

этот XPath 1.0 выражение,

/div[@class='test']//*[ starts-with(text(),'Part') 
         and not(following::*[starts-with(text(),'Part')]) 
         ]/following-sibling::text() 

для страницы 1, отремонтированной быть хорошо сформированы,

<div class="test"> 
    <ul> 
     <li><b>Part 1</b>Lorem ipsum dolor sit amet,</li> 
     <li><b>Part 2</b>consectetur adipisci elit, 
     <br/> sed eiusmod tempor incidunt ut labore 
     <br/> et dolore magna aliqua.</li> 
    </ul> 
</div> 

будет выбрать несколько текстовых узлов,

consectetur adipisci elit, 

sed eiusmod tempor incidunt ut labore 

et dolore magna aliqua. 

, которые должны быть обрезаны/конкатенации вне XPath 1.0, получая,

consectetur adipisci elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua. 

и страницы 2, также отремонтированы быть хорошо сформированы,

<div class="test"> 
    <b>Part 1</b>Lorem ipsum dolor sit amet, 
    <br/> <b>Part 2</b>consectetur adipisci elit, 
    <br/> <b>Part 3</b>sed eiusmod tempor incidunt ut labore et dolore magna aliqua. 
</div> 

будет выберите

sed eiusmod tempor incidunt ut labore et dolore magna aliqua. 

в соответствии с запросом.

+0

Отличный ответ! Но, например, если я хочу извлечь «описание» («информация») на этой странице ([ссылка] (http://foolrulez.org/slide/reader/series/seitokai_yakuindomo/))? Можно ли получить его без знания содержимого тега b? – NoName

+0

Пожалуйста, [** accept **] (http://meta.stackoverflow.com/q/5234/234215) этот ответ, если это поможет, и создайте новый вопрос, столь же понятный, как этот, с вашим новым запросом. Обязательно укажите в нем, как найти «описание», если вы не можете считать его ярлыком. Благодарю. – kjhughes

Смежные вопросы