0

我有一个 HTML 表格

我的解析代码是

$src = new DOMDocument('1.0', 'utf-8');
$src->formatOutput = true;
$src->preserveWhiteSpace = false;
@$src->loadHTML($result);
$xpath = new DOMXPath($src);
$data=$xpath->query('//td[ contains (@class, "bodytext1") ]');
foreach($data as $datas)
{
echo $datas->nodeValue."<br />";
}
$values=$xpath->query('//tr[ contains (@bgcolor, "f3fafe") ]');
foreach($values as $value)
{
echo $value->nodeValue."<br />";
}
$values1=$xpath->query('//tr[ contains (@bgcolor, "def0fa") ]');
foreach($values1 as $value1)
{
echo $value1->nodeValue."<br />";
}

要打印,我希望它们与上面显示的其他行一起在我需要的输出中重复。我想把这整件事放在一个数组中,这样我就可以把它插入数据库

谁能指导我或给我任何提示,以便我可以做到这一点

4

2 回答 2

0

这应该让你开始。

$src = new DOMDocument('1.0', 'utf-8');
$src->formatOutput = true;
$src->preserveWhiteSpace = false;
$src->loadHTML($result);
$xpath = new DOMXPath($src);

// get header data
$data=$xpath->query('//table[1]//td');

$htno = trim(explode(":",$data->item(0)->nodeValue)[1]);
$name = trim(explode(":",$data->item(1)->nodeValue)[1]);
$fatherName=trim(explode(":",$data->item(2)->nodeValue)[1]);

// rows from 2nd table 
$values1=$xpath->query('//table[2]//tr');
$header = true;  // flag to track whether we've read the header row.
foreach($values1 as $value1)
{
if (!$header) {
  $rowdata = str_replace("\r\n"," ",$value1->nodeValue);
  echo $htno," ",$name," ",$fatherName," ",$rowdata,"\n";
}
$header = false;
}

笔记:

  • $header 标志是一个快速修复。更好的 Xpath 查询可能会消除对它的需要。
  • 靠近str_replace底部是丑陋的,但权宜之计。您可能想使用xpath查询来查看是否可以改进它。
  • 输出未针对 HTML 格式化 - 行由\n
  • 我在其中包含的一行收到警告&,因此我将其更改为AND. 您可能必须对表格进行预处理以以某种方式消除这些表格。
于 2013-07-17T05:25:41.270 回答
-1

您可以使用第三方的 dll,例如“Html Agility Pack”。一个专业的将html转换为xml的工具。

于 2013-07-17T05:59:48.920 回答