Я использую оператор OR (более одного раза) в своем выражении XPath, чтобы извлечь то, что мне нужно в контенте, до того, как будет найдена конкретная строка, такая как «Ссылка», «Для получения дополнительной информации» и т. Д. Любая из этих условия должны возвращать один и тот же результат, но они могут быть не в таком порядке. Например, «Ссылка» может быть не первой и может вообще отсутствовать в контенте, а в одном из совпадений используется таблица «О данных». Я хочу, чтобы все содержимое отображалось до появления любой из этих строк.
Любая помощь будет оценена.
$expression =
"//p[
starts-with(normalize-space(), 'Reference') or
starts-with(normalize-space(), 'For more')
]/preceding-sibling::p";
Это также необходимо учитывать таблицу:
$expression =
"//article/table/tbody/tr/td[
starts-with(normalize-space(), 'About the data used')
]/preceding-sibling::p";
Вот пример:
<root>
<main>
<article>
<p>
The stunning increase in homelessness announced in Los Angeles
this week — up 16% over last year citywide — was an almost an
incomprehensible conundrum.
</p>
<p>
"We cannot let a set of difficult numbers discourage us
or weaken our resolve" Garcetti said.
</p>
<p>
References
By Jeremy Herb, Caroline Kelly and Manu Raju, CNN
</p>
<p>
For more information: Maeve Reston, CNN
</p>
<p>Maeve Reston, CNN</p>
<table>
<tbody>
<tr>
<td>
<strong>About the data used</strong>
</td>
</tr>
<tr>
<td>From
</td>
<td>Washington, CNN</td>
</tr>
</tbody>
</table>
</article>
</main>
</root>
Результат, который я ищу, будет следующим.
<p>
The stunning increase in homelessness announced in Los Angeles
this week — up 16% over last year citywide — was an almost an
incomprehensible conundrum.
</p>
<p>
"We cannot let a set of difficult numbers discourage us
or weaken our resolve" Garcetti said.
</p>