Недавно я получил помощь в разборе всех текстовых узлов из HTML-документа.Получившийся код был следующим:
$doc = new DOMDocument();
$doc->loadHTML($contents);
$doc->loadHTML("<p>not in the brackets..</p>");
$xpath = new DOMXPath($doc);
$textnodes = $xpath->evaluate('//text()');
Используя следующий экстракт:
<p>This is a <b>nested <i>HTML</i> tag<b>...</p>
Я могу создать массив элементов:
Array
(
[0] => This is a
[1] => nested
[2] => HTML
[3] => tag
[4] => ...
)
Что яхотя на самом деле хотелось бы получить все текстовые узлы , но разрешить «просмотр» некоторых тегов HTML .Например, я не хочу, чтобы теги <i>
, <b>
и <u>
были проанализированы как отдельные узлы;Я бы предпочел, чтобы они присоединились к предыдущему текстовому узлу.Вышеупомянутый массив в идеале должен выглядеть следующим образом:
Array
(
[0] => This is a nested HTML tag...
)
С другой стороны, теги <p>
должны распознаваться как отдельные узлы.Поэтому следующий текст:
<p>paragraph 1 <b>here</b></p> <p>paragraph 2</b>
в идеале будет разбираться как:
Array
(
[0] => paragraph 1 <b>here</b>
[1] => paragraph 2
Я немного прочел о XPath и PHP DOM, но, честно говоря, на самом деле у меня нетключ к разгадке.Кто-нибудь может указать мне правильное направление?Спасибо.
Редактировать
Просто чтобы уточнить вывод должен быть в формате массива;Моя цель состоит в том, чтобы разобрать весь текст со страницы, чтобы затем его можно было использовать в файле перевода.Поэтому некоторые определенные теги HTML (<b>
и т. Д.) Желательны в разобранном тексте, чтобы сохранить вместе полные предложения - и сохранить разметку примерно нетронутой - в новом файле перевода.