質問: simplexml_load_string($xmlString); var_dump($xmlObject); ``` 結果 ``` bool(false) ``` となる。 別にamazon以外のサイトでやってみたらちゃんと整形されたものが出てきました。 この違いはなんなのでしょうか?
回答: 概要 質問のコメントにもありますが、例示されたURLで試すと、パースエラーが発生します。 Amazon が返す HTML に文法エラーがあるためです。 こういったエラーがあるものを何とか通す方法はちょっと思い付かないので、原因の指摘のみで。 詳細 手持ちの環境 (PHP 5.6.9-pl0-gentoo) では、以下のエラーが発生しました (長いので最初の部分だけ)。 ``` PHP Warning: simplexml_load_string(): Entity: line 1771: parser error : Double hyphen within comment: ` の間に `--` が出現しているため、不正なコメントとなっています。このため、パースエラーが発生します。 試しに、このXMLソースから、該当部分の `` までを削除すると、パースに成功します。 (`--` を含んではならないという制限 (SGMLとの兼ね合いによるもの)、割と忘れられがちですよね。) エラー原因の調査方法 今回は、エラーが発生するコード断片まで分かっているのですから、 `php -a` による対話的シェルを起動して、一行ずつ実行し、適宜 `var_dump()` で変数の内容を確認していけば (長ければファイルに書き出すのも手)、簡単に原因に辿り着けたと思います。実際、私はそういった方法で原因を把握しました。 今回の例では、 `$domDocument->loadHTML($html);` と `$xmlObject = simplexml_load_string($xmlString);` で警告・エラーメッセージが表示されるので、HTMLがおかしいとすぐ気付けるかと思います。