Как получить HTML-код между двумя тегами br в xpath - PullRequest
0 голосов
/ 18 января 2019

Я разделяю свой контент, для которого я храню таблицу базы данных, и хочу, чтобы он отображался в 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 () в разных местах, но я не смог получить результаты что я хотел.

...