【问题标题】:(PHP) How to arrange HTML table content having breaking row element for outputting as one line output?(PHP) 如何排列具有断行元素的 HTML 表格内容以输出为一行输出?
【发布时间】:2017-11-17 02:11:54
【问题描述】:

我想从抓取的文件中安排输出格式。

我想将它们全部放在一行中的输出文件。

对于分开每个td,我的预期输出如下:

<b>Nation / Area</b>(Name tag)&nbsp;&nbsp;&nbsp;&nbsp;<b>Detail</b>Address Telephone

(解释)“国家/地区”、“(名称标签)”、“4 个空格”、“详细信息”和 “地址电话”随后被列为我的预期输出。 总共有 5 个字段。

================================================ ===

我不知道如何处理这种情况。

这是页面HTML代码。

<table border='1' id='hi_hosts_table_id' cellspacing='0' cellpadding='4'>
    <tr>
        <td class='hi_table_header'><b>Nation / Area</b><br>(Name tag)</td>
        <td class='hi_table_header'><b>Detail</b><br>Address<br>Telephone</td>
    </tr>
</table>

这是我安排该输出文件的代码。

$absolute_path = '/home/hi/mycrawler/benchmark';
include($absolute_path.'/simple_html_dom/simple_html_dom.php');
$dom = file_get_html($absolute_path.'/'.$datetime.'benchmark.html');
#download the list
if ($dom->find('table[id=hi_hosts_table_id]'))
{
  foreach($dom->find('table[id=hi_hosts_table_id]')->find('tr') as $row) 
    {
      $location = $row->find('td',0)->plaintext;
      $detail= $row->find('td',1)->plaintext;
      echo "$location $detail\n";
    }
} else {
  #Pending match or not match 
  echo "No match. There are some problems.\n";
  exit(0);
}
exit(0);
?>

【问题讨论】:

  • 您是否只想在 $location 和 $detail 之间使用一个制表符??
  • 如果你想在 1 行输出,不要在 中使用
    。这将强制输出转到下一行。
  • @Nic3500 谢谢。那一刻我对此很愚蠢。谢谢你的评论。我的名声比较低。我希望你能投票给这个帖子。感谢您的慷慨帮助。

标签: php web-crawler


【解决方案1】:

当您执行$row-&gt;find('td',0) 时,结果是一个描述HTML 的&lt;td class='hi_table_header'&gt;&lt;b&gt;Nation / Area&lt;/b&gt;&lt;br&gt;(Name tag&lt;/td&gt; 部分的节点。

当您执行-&gt;plaintext 时,执行的代码是simple_html_dom_node::text()。虽然这种方法似乎做了很多事情,但它并没有将 HTML 转换为纯文本;相反,它只是返回所有“文本”

所以,如果你想删除换行符,你必须自己做:

$location = str_replace('<br>', ' ', $row->find('td',0)->plaintext);
$detail= str_replace('<br>', ' ', $row->find('td',1)->plaintext);

【讨论】:

  • 这里有派生的东西。如果td 的代码为&lt;td class='hi_table_row_0' style='text-align: right;'&gt;&lt;b&gt;&lt;span style='font-size: 10pt;'&gt;Note&lt;/span&gt;&lt;/b&gt;&lt;BR&gt;Rate: &lt;b&gt;12 pt&lt;/b&gt;&lt;BR&gt;&lt;BR&gt;&lt;b&gt;58 min&lt;/b&gt;&lt;BR&gt;Period: &lt;BR&gt;2 weeks&lt;/td&gt;,如何获取&lt;td class='hi_table_row_0' style='text-align: right;'&gt;&lt;b&gt;&lt;span style='font-size: 10pt;'&gt;Note&lt;/span&gt;&lt;/b&gt;&lt;BR&gt;Rate: &lt;b&gt;12 pt&lt;/b&gt;&lt;BR&gt;&lt;BR&gt;&lt;b&gt;58 min&lt;/b&gt;&lt;BR&gt; 仅。 Period: &lt;BR&gt;2 weeks&lt;/td&gt; 部分的其余部分我想摆脱它。再次感谢。
  • 伙计,你的 HTML 很乱。我认为我会使用explode()&lt;br&gt;标签上拆分它,使用array_slice()从列表中删除最后两项,然后将其与implode()重新组合。
  • 嗨,谢谢。你提名的功能有利于我创造我想要的东西。再次感谢。
  • 谢谢。你介意增加投票来提高这个答案吗?我不知道为什么我的声誉很低。希望您能提供帮助。
  • @jefferyear “我不知道为什么我的声誉很低。”你的句子很不干净。例如,另请参阅stackoverflow.com/questions/46058062/… 的 cmets。另外,请不要要求投票。人们不会仅仅因为你要求他们就赞成一个 4 岁的问题。如果有的话,人们实际上可能会投反对票。将您刚刚用于请求支持的时间和精力花在解决问题上。
猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-29
相关资源
最近更新 更多