作成日: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);
}