如何在xpath中的两个br标签之间获取html代码

时间:2019-01-17 21:43:08

标签: html5 xpath domdocument php-7.3

我将存储在数据库表中的内容分离出来,并用HTML5在TinyMCE(javascript)中显示。每行中的内容当前以降序排列,其中显示的每个日期按从最早到最新的顺序排列。它们分别由两个<br/> html标记分隔。而且我决定将DOMXPath和DOMDocument一起用于PHP。之所以这样,是因为TinyMCE不建议使用任何根目录块/标签,并且我选择了这种方法,因为我需要将数据从最新到最旧的顺序倒排,以便在TinyMCE中附加和显示。我将使用此代码两次,一次是向后排列数据以查看和追加新数据,一次是将数据保存回表行。这样,用户不必一直滚动到文本区域的底部即可向数据库添加新数据。

我已经找到了一些$xpath->query()可以将文本彼此分开的代码。但是我还需要查看描述和设置每个文本样式的HTML代码。

我尝试使用XML“节”来简化内容,但是根据手册,不建议对TinyMCE使用force_root_block,因为它可能会对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代码。并为数据使用样式参数。

我已经从该网址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()放在不同的位置,但是我无法生成我想要的结果。

0 个答案:

没有答案