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
  • が含まれている 1 行で警告が表示された&ので、 に変更しましたAND。何らかの方法でそれらを排除するために、テーブルを前処理する必要がある場合があります。
于 2013-07-17T05:25:41.270 に答える
-1

「Html Agility Pack」などのサードパーティの dll を使用できます。html を xml に変換する専門的なツールです。

于 2013-07-17T05:59:48.920 に答える