php エディタ Baicao は、無効な XML ファイルを解析する方法を紹介します。 XML ファイルを処理するときに、おそらく形式が整っていないかエラーが含まれているために、無効な XML が発生することがあります。無効な XML ファイルの解析は、必要なデータを確実に正しく取得するために重要なタスクです。この問題を解決するには、PHP の組み込み関数とライブラリを使用して、無効な XML をチェックして修正します。以下では、無効な XML ファイルを解析するために一般的に使用されるいくつかの方法を詳しく紹介します。
現在、他の製品から受け取った XML を解析する機能に取り組んでいます。実際の顧客データに対していくつかのテストを実行することにしましたが、他の製品では無効と見なされるべき入力をユーザーが入力できるようです。とにかく、それを解析する方法を見つけ出す必要があります。 javax.xml.parsers.documentbuilder
を使用していますが、入力中に次のエラーが発生します。
ご存知のとおり、説明に無効なタグ (d30036ddc824403d51b03f80ff62bdc4
) が含まれているようです。現在、この description タグはリーフ タグとみなされ、内部にネストされたタグを含めることはできません。いずれにしても、これは依然として問題であり、documentbuilder.parse(...)
これが無効な XML であることはわかっていますが、予想通り無効です。そのような入力を解析する方法について何かアイデアはありますか?
"xml" は invalid よりも悪いです - 整形式ではありません ; # を参照してください。整形式で有効な xml。
違反の予測可能性に関する非公式の評価は役に立ちません。テキストデータはxmlではありません。これに対処するのに役立つ、一貫性のある XML ツールやライブラリはありません。オプション、最初に理想的なもの:
整形式の XML が必要です。 (技術的には、整形式 xml という用語は冗長ですが、強調すると役立つかもしれません。)
xml に解析する前に問題を修正してください:
html tiny XML でも有効です。 taggle は c へのポート tagsoup です。
美しいスープ Python に基づいています。 パーサー間の違いセクションのコメントを参照してください。詳細については、この質問への回答も参照してください。
Python での不正なタグの処理に関するアドバイス
具体的には、lxml の recover=true オプション が含まれます。
codecs.encodedfile() を使用して不正な文字をクリーンアップする方法については、この回答も参照してください。
tagsoup と jsoup は HTML に焦点を当てています。 filterinputstream
前処理クリーンアップに使用できます。
#########。ネット:######
xmlreadersettings。 conformancelevel
可以设置为
conformancelevel.fragment
这样 xmlreader
可以读取缺少根元素的 xml 格式良好的解析实体 .xmlreader.readtofollowing()
有时可以
用于解决 xml 语法问题,但请注意
下面#3 中的违规警告。microsoft.language.xml.xmlparser
据说是“容错”的。转到:设置decoder.strict
到 false
,如示例所示,作者:@chuckx。
php:请参阅domdocument::$recover 和 libxml_use_internal_errors(true)。请参阅此处的好示例。
ruby:nokogiri 支持“温和的 well-形式性”。
r:请参阅htmltreeparse() 用于 r 中的容错标记解析。
perl:请参阅xml::liberal ,一个“超级自由的 xml 解析器,可以解析损坏的 xml。”
使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束。
对于无效字符错误,请使用正则表达式删除/替换无效字符:
preg_replace('/[^\x{0009}\x{000a}\x{000d} \x{0020}-\x{d7ff}\x{e000}-\x{fffd}]+/u', ' ', $s);
string.tr ("^\u{0009}\u{000a}\u{000d}\u{0020}-\u{d7ff}\u{e000}-\u{fffd}", ' ')
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 サイトの他の関連記事を参照してください。