ホームページ >Java >無効な (エラー/不正な) XML を解析するにはどうすればよいですか?

無効な (エラー/不正な) XML を解析するにはどうすればよいですか?

PHPz
PHPz転載
2024-02-09 23:20:40764ブラウズ

php エディタ Baicao は、無効な XML ファイルを解析する方法を紹介します。 XML ファイルを処理するときに、おそらく形式が整っていないかエラーが含まれているために、無効な XML が発生することがあります。無効な XML ファイルの解析は、必要なデータを確実に正しく取得するために重要なタスクです。この問題を解決するには、PHP の組み込み関数とライブラリを使用して、無効な XML をチェックして修正します。以下では、無効な XML ファイルを解析するために一般的に使用されるいくつかの方法を詳しく紹介します。

質問内容

現在、他の製品から受け取った XML を解析する機能に取り組んでいます。実際の顧客データに対していくつかのテストを実行することにしましたが、他の製品では無効と見なされるべき入力をユーザーが入力できるようです。とにかく、それを解析する方法を見つけ出す必要があります。 javax.xml.parsers.documentbuilder を使用していますが、入力中に次のエラーが発生します。

リーリー

ご存知のとおり、説明に無効なタグ (d30036ddc824403d51b03f80ff62bdc4) が含まれているようです。現在、この description タグはリーフ タグとみなされ、内部にネストされたタグを含めることはできません。いずれにしても、これは依然として問題であり、documentbuilder.parse(...)

で例外が発生します。

これが無効な XML であることはわかっていますが、予想通り無効です。そのような入力を解析する方法について何かアイデアはありますか?

回避策

"xml" は invalid よりも悪いです - 整形式ではありません ; # を参照してください。整形式で有効な xml

違反の予測可能性に関する非公式の評価は役に立ちません。テキストデータはxmlではありません。これに対処するのに役立つ、一貫性のある XML ツールやライブラリはありません。

オプション、最初に理想的なもの:

  1. プロバイダー自身に問題を解決してもらいます。

    整形式の XML が必要です。 (技術的には、整形式 xml という用語は冗長ですが、強調すると役立つかもしれません。)

  2. 寛容なタグ パーサーを使用する

    xml に解析する前に問題を修正してください:

  3. 使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束

    • 对于无效字符错误,请使用正则表达式删除/替换无效字符:

      • php: preg_replace('/[^\x{0009}\x{000a}\x{000d} \x{0020}-\x{d7ff}\x{e000}-\x{fffd}]+/u', ' ', $s);
      • ruby: string.tr ("^\u{0009}\u{000a}\u{000d}\u{0020}-\u{d7ff}\u{e000‌​}-\u{fffd}", ' ')
      • javascript: inputstr.replace (/[^\x09\x0a\x0d\x20-\xff\x85\xa0-\ud7ff\ue000-\ufdcf\ufde0-\ufffd]/gm, '')
    • 对于与号,使用正则表达式将匹配项替换为 &: 信用:blhsin演示 p>

      &(?!(?:#\d+|#x[0-9a-f]+|\w+);)

请注意,上述正则表达式不会接受注释或 cdata

按照设计,标准 xml 解析器永远不会接受无效的 xml。

您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。

以上が無効な (エラー/不正な) XML を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。