XMLのパースでエラー取得(libxml_get_errors())

作成日:2019-08-26, 更新日:2019-09-24

経緯

・以前につくったソースをコピペしてもXMLがパースされない
・原因は不明
→「とりあえずエラーを表示させよう」となった。

原因

このときのエラーは・・・以前につくったソースはHTMLのタグをパースということで、「loadHTML()」を使ってた
→XMLをHTMLとして受け取ったせいで余計なタグが補完されてしまいエラー。
※「loadHTML()」を「loadXML()」に差し替え。

基本

「libxml_get_errors()」でエラーが取得できる。

サンプル

$source = '〇〇〇〇〇';

$domDocument = new DOMDocument();
libxml_use_internal_errors(true);
$domDocument->loadXML($source); // XMLのパース
// $domDocument->loadHTML($source); // HTMLをXMLとしてパース
libxml_clear_errors();
$xmlString = $domDocument->saveXML();

$sxe = simplexml_load_string($xmlString);
if (!$sxe) {
  // パースエラーのとき
  foreach(libxml_get_errors() as $error) {
    echo $error->message . "\n";
  }
  exit;
}
else {
  // 連想配列化
  $aryXML = json_decode(json_encode($sxe), true);
}