2016-03-31 2 views
1

Я использую библиотеку Crawler, которая поможет вам сделать некоторые выражения XPath для получения содержимого тегов HTML. В настоящее время я читаю содержимое HTML5 со страницы, и я хочу получить текст, который не вставлен в тег таким образом.Как использовать XPath для выбора дочернего текста после другого дочернего элемента

<div class="country"> 
    <strong> USA </strong> 
     Some text here 
</div> 

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

Так что любая альтернатива, пожалуйста.

Это самый Гусеничный часть:

$crawler = new Crawler(); 
$crawler->xpathSingle($xml, '//div[@class="country"]/strong/@text'); 
+1

и что произойдет, если вы попробуете этот XPath: '// div [@ class =" country "]/strong/follow-sibling :: text()'? потому что я не знаком с этой библиотекой «Crawler» - я знаю, что этот XPath работает, например, с использованием lxml в python. –

+0

Спасибо, чувак, он работает. Но он получает весь текст после сильного тега, даже если этот текст принадлежит к другим тегам. – KubiRoazhon

ответ

1

Любой из этих XPaths вернется "Some text here" по запросу:

  • normalize-space(substring-after(//div[@class="country"], 'USA'))

  • normalize-space(//div[@class="country"]/strong/following-sibling::text())

Выберите, исходя из вида вариантов, которые вы хотите разместить.

Кредит: Второй пример получен из предположения, сделанные в первом comment по @Keith Hall.


Update:

Как я уже говорил вам нужно выбрать XPath на основе изменений, которые вы хотите разместить. Не успел я отправляю, чем вы столкнулись вариацию:

<div class="country"> 
    <strong> USA </strong> 
     Some text here 
    <i>Do not want this text</i> 
</div> 

Вы можете исключить "Do not want this text" и вернуть "Some text here" в соответствии с просьбой, используя второй XPath выше, но просто взять первый следующий текстовый узел:

  • normalize-space(//div[@class="country"]/strong/following-sibling::text()[1])
+0

Это второй. Первый возвращает «США». Спасибо, чувак за помощь – KubiRoazhon

+0

Но он получает весь текст после сильного тега, даже если этот текст принадлежит к другим тегам. – KubiRoazhon

+0

Рад, что второй помог, но обратите внимание, что первый не возвращает '' США''; он возвращает '' Некоторый текст здесь ''по запросу. Что касается получения слишком большого текста после 'strong', ваш пример не показал такого случая, но вы можете адаптировать второй XPath, захватив только первый текстовый узел через' [0] '. Я могу обновить ответ для вас, чтобы показать вам ... – kjhughes

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