- ベストアンサー
HTMLソースからテーブルの値を抜き出して配列に保存する方法
- HTMLソースからテーブルの値を抜き出し、配列に保存する方法について教えてください。
- 例えば、以下のようなHTMLソースコードからテーブルの値を抜き出し、配列に保存する方法を知りたいです。
- ご存じの方がいらっしゃれば、教えていただけると助かります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
単純にtdタグに挟まれたデータを抜き出すだけならこんな感じで? <? $str=<<<eof <html> <head> <div> <table id="sample-table"> <tr> <td> a </td> <td> b </td> <td> c </td> </tr> <tr> <td> d </td> <td> e </td> <td> f </td> </tr> <tr> <td> x </td> <td> y </td> <td> z </td> </tr> </table> </div> </head> </html> eof; $pattern="/(?<=<td>).*?(?=<\/td>)/"; preg_match_all($pattern,$str,$matches); print_r($matches); ?>
その他の回答 (3)
- yuu_x
- ベストアンサー率52% (106/202)
http://jp2.php.net/manual/ja/class.domdocument.php http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html http://www.w3.org/TR/DOM-Level-3-Core/core.html 使うんならマニュアル読んでね。 使いこなせないなら、正規表現なり simple_xml なりでいんじゃない。
お礼
返事が遅くなってしまい申し訳ありません。 今回はyambejpさんの提示していただいた正規表現で実現できました。 DOMDocumentについては私の知識が足りずまだ理解できておりませんが提示していただいたマニュアルなどでいずれ理解したいと思います。
- yyr446
- ベストアンサー率65% (870/1330)
No.2です。 htmlのソース(タグなども含む)は全て変数の$dataなどに保存してある状態です。 =>でしたね、 $htmldata=file_get_contents("hoge.html");は不要です。 @$dom->loadHTML($data); で、いいです。 ※@を付けてるのは、HTMLの文法を守ってない可能性を無視したいためです。 ※文字コードは適時、お使いの環境に合わせてください。
お礼
読み込みは @$dom->loadHTML($data); で出来たようです。 ありがとうございます。
- yyr446
- ベストアンサー率65% (870/1330)
DOMオブジェクトに流し込んで、 DOM APIやXpathで取り出せばどうでしょう。 <?php mb_internal_encoding("UTF-8"); $htmldata=file_get_contents("hoge.html"); $arry = array(); $dom = new DOMDocument(); @$dom->loadHTML($htmldata); $dom->normalizeDocument(); $xpath = new DOMXPath($dom); $query = "/descendant::tr"; $entries = $xpath->query($query); foreach($entries as $entry){ $tds=$entry->getElementsByTagName("td"); for ($i = 0; $i < $tds->length-1; $i++) { array_push($arry,mb_convert_encoding($tds->item($i)->textContent), "ISO-8859-1","UTF-8")); } } ?>
お礼
返事が遅くなってしまい申し訳ありません。 提示していただいた方法では私の知識が足りずうまく動作させることができませんでした。 DOMというものをもう少し学んでからまた試してみたいと思います。
お礼
返事が遅くなってしまい申し訳ありません。 提示していただいた方法で実現できました。 ありがとうございます。