1

これは、古いテーブルからデータをロードするための私のスクリプトです。つまり、「編集不可」です。

$document = new DOMDocument();
$document -> loadHTMLFile('http://www.table.html');
$rows   = $document -> getElementsByTagName('tr');

その後、 を<td>配列にロードします。

    $numRow = 0;
    foreach($rows as $result){

// 15 columns to load.
        for($i = 0; $i < 15; $i++){
        $array[$numRow][$i] = $result
        ->getElementsByTagName('td')
        ->item($i)
        ->nodeValue;
        }
    $numRow++;
    }

ここまでは順調に進んでいましたが、その後問題が発生しました。すべての行には「説明」の文字列列があり、説明には次のような人間のタイプミスがよくあります。

これはセルです: <td>Suppor<</td>(誰かがここでIDKを間違えました) エラー:Tag o invalid

または、次のようにセルに「&」が含まれている場合:

別の例:<td>From A&A Limited.</td>エラー: htmlParseEntityRef: expecting ';'

エラーは常にこの行を参照します$document -> loadHTMLFile('http://www.table.html');

ご覧のとおり、テーブルは文字列列15 columnsになっています。$i = 4私は真の PRO プログラマーではなく、これが来るとは思っていませんでした。私に手を差し伸べてくれる人に、事前に感謝します。

4

3 に答える 3

0

壊れた HTML を修正するための魔法のような方法を見つけることはできないと思いますが、(DOMDocument を強化する) libxml がエラーを処理する方法を少し変更して、可能な限り多くの使用可能な出力が得られるようにすることはできます。エラー処理を内部に変更してみましたか? libxml_use_internal_errors()を確認してください。

于 2012-04-30T17:27:21.693 に答える
0

私はこれを行うソリューションを見つけました:

@$document -> loadHTMLFile('http://www.table.html');
$rows   = $document -> getElementsByTagName('tr');

$nodeListLength = htmlentities($rows->length);
for ($i = 0; $i < $nodeListLength; $i ++)
{
    $node = $gastos->item(0);
    //-> VALORES A MOSTRAR EN TU QUERY
}

同じ問題を抱えている別の人に役立つことを願っています。私の問題をチェックしてくれた人々に感謝します。

于 2012-05-02T13:49:27.567 に答える