Как получить HTML-код между двумя тегами br в xpath
Я разделяю свой контент, который я храню в таблице базы данных, и хочу, чтобы он отображался в TinyMCE (javascript) с HTML5. Содержимое, которое находится в каждой строке, в настоящее время находится в порядке убывания, где каждая отображаемая дата упорядочена по возрастанию до самого нового. Каждый из них разделен двумя <br/>
HTML-теги. И я решил использовать DOMXPath вместе с DOMDocument для PHP. Таким образом, поскольку TinyMCE не рекомендует использовать какой-либо корневой блок / теги, и я выбрал этот маршрут, потому что мне нужно расположить данные в обратном порядке от самых последних к самым старым, чтобы их можно было добавлять и отображать в TinyMCE. Я буду использовать этот код дважды, один раз, когда я упорядочу данные в обратном порядке, чтобы просмотреть и добавить новые данные, и еще раз, когда я сохраню данные обратно в строку таблицы. Таким образом, пользователю не нужно прокручивать весь текст до конца текстовой области, чтобы добавить новые данные в базу данных.
Я уже нашел код, для которого $xpath->query()
может отделить текст друг от друга. Но мне также нужно увидеть HTML-код, который описывает и стилизует каждый текст.
Я попытался использовать "разделы" XML, чтобы сделать его более легким для контента, но согласно руководству не рекомендуется использовать принудительный_блок для TinyMCE, так как это может отрицательно и радикально повлиять на использование TinyMCE. Это также потребовало бы, чтобы пользователь использовал Shift+Enter для создания нового раздела. Вместо этого пользователю потребуется только помнить, чтобы он помещал 2 переноса строки каждый раз, когда делается новая запись. Я также хотел бы полагаться только на использование кода HTML5.
$sample-data = <<<EOT
09/11/2017
<p><span style="font-color: #FF0000";>Test1</span></p>
<br />
<br />
10/27/2017
<p>Test2</p>
<br />
<br />
02/05/2018
Test3
EOT;
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
libxml_use_internal_errors(true);
$dom->loadHTML($sample-data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
$xpath->query('//br[
following-sibling::node()[self::*|self::text()[normalize-space()]
][1][self::br]
]/following-sibling::*/preceding-sibling::text()');
foreach ($obj as $text) {
//echo $dom->saveXML($text);
echo $text->textContent . "";
}
К сожалению, этот код выдает вдвое больше данных, в результате чего каждый брат создает разрыв строки <"\ r \ n...">. Мне нужен этот код для создания текста, а также HTML-код, который описывает и использует стили параметр для данных.
Я принял большую часть запроса из этого URL- тега xpath-to-get-data-before-2-br-tags
Но мне нужно увидеть и HTML-код. Я решил использовать следующие константы. так что мой код / результаты не добавляются с дополнительными тегами HTML.
$dom->loadHTML($sample-data, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
Я также знаю, что для создания любого HTML-кода, который мне нужно использовать $dom->saveXML($text);
Я несколько раз пытался разместить node() и last() в разных местах, но не смог получить желаемых результатов.