【问题标题】:PHP DOMDocument table but leave inner HTML contentPHP DOMDocument 表但保留内部 HTML 内容
【发布时间】:2017-11-26 23:44:41
【问题描述】:

我正在尝试在 HTML 表格中显示每一行并将内部 HTML 标记保留在结果中,但我无法让它工作,并且它不断剥离 HTML 内部标记什么是最适合我的从 HTML 表中提取行并将内部 HTML 标记保留在结果中?

这是我目前正在使用的代码:

<?php
 function tdrows($elements){
   $str = "";
   foreach ($elements as $element) {
     $str .= $element->nodeValue . ", ";
   }

  return $str;
 }

 function getdata(){
   $content = "<table border="0" cellspacing="0" cellpadding="0" class="ta1"><colgroup><col width="99"/><col width="99"/><col width="99"/><col width="99"/></colgroup><tr class="ro1"><td style="text-align:left;width:2.267cm; " class="ce1"><p>Col A</p></td><td style="text-align:left;width:2.267cm; " class="ce2"><p>Col B</p></td><td style="text-align:left;width:2.267cm; " class="ce3"><p>Col C</p></td><td style="text-align:left;width:2.267cm; " class="ce5"><p>Col D</p></td></tr><tr class="ro2"><td style="text-align:left;width:2.267cm; " class="Default"><p>This <span class="T1">is</span> a test</p></td><td style="text-align:left;width:2.267cm; " class="Default"><p>This is a <span class="T2">test</span></p></td><td style="text-align:left;width:2.267cm; " class="ce4"><p>This<span class="T3"> is</span> a test<span class="T4">2</span></p></td><td style="text-align:left;width:2.267cm; " class="Default"><p>This is a test</p></td></tr></table>";

   $DOM = new DOMDocument;
   $DOM->loadHTML($contents);

   $items = $DOM->getElementsByTagName('tr');

   foreach ($items as $node) {
     echo tdrows($node->childNodes) . "<br />";
   }
}

getdata();

目前在下面显示的是正确的,但缺少内部 HTML 标记。

Col A, Col B, Col C, Col D, 
This is a test, This is a test, This is a test2, This is a test, 

也许我看错了,应该有另一种方法可以让我从表格中提取信息以获得正确的结果。任何帮助将不胜感激。

【问题讨论】:

  • TYPO:第一个知道 $contents 变量应该是 $content 第二个:双引号问题你需要正确转义 $content 字符串。
  • 哪个内部html?与tdtd 除外?

标签: php html html-table domdocument


【解决方案1】:

DOMNode-&gt;nodeValue 等价于DOMNode-&gt;textContent for DOMElement(它是DOMNode 的派生词);它只会为您提供其自身及其所有后代节点的文本内容。

如果你也想要 HTML,你应该使用DOMDocument::saveHTML( DOMNode $node = null ),像这样:

function tdrows($elements){
  $str = "";
  foreach ($elements as $element) {
    $str .= $element->ownerDocument->saveHTML( $element );
  }

  return $str;
}

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2016-02-14
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多