※ ChatGPTを利用し、要約された質問です(原文:PHPでHTMLをXMLに変換したときに消える内容)
PHPでHTMLをXMLに変換する際に消えてしまう内容
このQ&Aのポイント
PHPを使用してHTMLをXMLに変換する際、一部の内容が消えてしまう現象について教えてください。
例えば、特定の要素やテキストが変換後のXMLに含まれなくなってしまうことがあります。
原因はHTMLの書き方によるものかもしれませんが、どのように対処すればいいのでしょうか。
PHPでHTMLをXMLに変換したときに消える内容
教えてください。
スクレイピングのために、よく分からないままに、
PHPでHTMLをXMLに変換して、Xpathで参照しようとしています。
が。
その前段で、「HTML内に存在する内容が、XMLに変換した際に
消えてしまう」という現象に悩まされております。
例を挙げますと、
---------------------------------------
<html>
<body>
<table>
<tr>
<td><b>foo</b>
bar<br>
</td>
</tr>
</table>
</body>
</html>
---------------------------------------
みたいなページを、
---------------------------------------
<?php
$html = file_get_contents('http://xxxxxxxxxxxxxxxxx.com/foobar.html');
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xml = simplexml_import_dom($dom);
print_r($xml);
?>
---------------------------------------
のように処理すると、
---------------------------------------
SimpleXMLElement Object ( [body] => SimpleXMLElement Object ( [table] => SimpleXMLElement Object ( [tr] => SimpleXMLElement Object ( [td] => SimpleXMLElement Object ( [b] => foo [br] => SimpleXMLElement Object ( ) ) ) ) ) )
---------------------------------------
のような結果になって、「あれ?fooはいるけど、barは何処いった?」となります。
分かっている方には、「そりゃ、おまえ、あたりまえだよwww」
「つーか、なにやっとんのwww」って感じなのかもしれませんが、
さっぱり分かりません。
元のHTMLの書きぶりがダメだからということでしょうか。
お手数をお掛けしますが、どうぞ、ご教授ください。
よろしくお願いいたします。
お礼
教えていただいたうえに、参考サイトまで提示してもらい、感激です! しかし、通常のHTMLにはタグで囲われてない文字もかなりの頻度で あると思うのですが、そういうのはポロポロ抜けてしまうということ になってしまうんでしょうかねぇ。 それこそ、自動的にspanタグで囲うような処理を間に挟んだりして もらいたいもんだなぁ、と勝手ながら、思ってしまいました。 なのですが、実際の解決法については、教えていただいた参考サイトに、 「自分で正規表現を使って必要部分だけを抜き出す方法は、全ての方法 の中で最も高速」とあったことで、今更ながら「ですよねー」と思い至り、 file_get_contentsで取得したものを、正規表現で削り取るというような、 素朴で泥臭い方法に変えまして、目的は何とか遂げることができました。 ちょっとハラホロヒレハレな結末になってしまいましたが、 ご助言がなければ、もっとヒーヒー言っていたことと思います。 非常に、助かりました。 ありがとうございました。 感謝感謝です!!!