0

私はlibxml2ライブラリを使用して、私(私のプログラム)に送信されたXMLを別のプログラムからのファイルとして解析しています。注意して、それは私が決して悪いXMLを取得しないことを意味するはずですが、すでに2回、受信したファイルのXMLを壊す手作業の微調整を行いました。壊れているとは、要素にエラーがある、終了タグが開始タグと一致しない、タグの間にランダムな文字があるなどを意味します。

ファイルは小さいので、すべてをパーサーにロードすることについて特にメモリの心配はありません。そこで、xmlReadFile()を使用してドキュメントを読み取ります。

私の問題は、XMLが壊れているときに発生します。xmlReadFile()は、異常終了とコアダンプを実行します。例外を除いてそれをキャッチすることも、フラグを「回復」するように設定することもできません。

私は最小限の成功でグーグルを見てきました。xmllintを見つけましたが、新しいXMLファイルを取得するたびにsystem()またはpopen()を呼び出す必要はありません。DTDを調べましたが、渡された値を実際に検証するようにDTDに指示する方法がわからないようです。(ドキュメント内のタグの多くには、たとえば5つの可能な回答のセットの1つである値があります。)もちろん、DTDが機能した場合、少なくともxmlReadFile()をクラッシュさせることはありません。

xmlReadFile()の前またはxmlReadFile()を使用してXMLを検証する方法、およびクラッシュを防ぐ方法に関する提案はありますか?xmllintには私が見つけていないC++インターフェースがありますか?

ブーストなし。ライブラリを変更する必要はありません。

4

1 に答える 1

1

試しましたxmlReaderForFile(... XML_PARSE_RECOVER ...)か?

于 2012-09-18T12:14:44.127 に答える