DOMを保持しながらXMLを解析するときに詳細なエラー情報を取得するにはどうすればよいですか?
-
06-07-2019 - |
質問
サイトの管理者がXMLをテキストエリアに追加し、データベーステーブルに保存するために送信できるWebフォームを作成していますが、XMLを解析する最良の方法については少し混乱しています。
PHPスクリプトはXMLを解析する必要があり、解析エラーがある場合は、フォームを送信した管理者にパーサーが停止したエラーメッセージと行/列を返す必要があります。解析後、DOMにアクセスして、XPathを使用してノードと属性の存在を確認するいくつかのチェックを実行する必要があります。
xml_create_parser()
および xml_parse()
を使用すると、falseが返された場合に、後で詳細なエラー情報を取得できます。ただし、XMLの解析後、DOMにアクセスできません。 DOMDocument :: loadXML()
を使用した場合、これまで読んだものから、解析エラーの例外はスローされず、PHPログに出力されるだけです。
最初に xml_parse()
を試し、それが成功した場合、ファイルがほとんどであると考えて DOMDocument :: loadXML()
を実行すると、パフォーマンスが大幅に低下しますかいくつかは10-20KBですが、10KBよりも小さいですか?誰もがより良い方法を知っていますか?
解決
libxml_use_internal_errors を有効にしてから、-if DOMDocument :: load()failed-を使用して詳細なエラーメッセージを照会できます。 libxml_get_errors()
<?php
$xml = '<a>
<b>xyz</b>
<c>
</a>';
libxml_use_internal_errors(true);
$doc = new DOMDocument;
if ( !$doc->loadxml($xml) ) {
$errors = libxml_get_errors();
var_dump($errors);
}
所属していません StackOverflow