無効な (エラー/不正な) XML を解析するにはどうすればよいですか?
php エディタ Baicao は、無効な XML ファイルを解析する方法を紹介します。 XML ファイルを処理するときに、おそらく形式が整っていないかエラーが含まれているために、無効な XML が発生することがあります。無効な XML ファイルの解析は、必要なデータを確実に正しく取得するために重要なタスクです。この問題を解決するには、PHP の組み込み関数とライブラリを使用して、無効な XML をチェックして修正します。以下では、無効な XML ファイルを解析するために一般的に使用されるいくつかの方法を詳しく紹介します。
質問内容
現在、他の製品から受け取った XML を解析する機能に取り組んでいます。実際の顧客データに対していくつかのテストを実行することにしましたが、他の製品では無効と見なされるべき入力をユーザーが入力できるようです。とにかく、それを解析する方法を見つけ出す必要があります。 javax.xml.parsers.documentbuilder
を使用していますが、入力中に次のエラーが発生します。
ご存知のとおり、説明に無効なタグ (<this-is-part-of-description>
) が含まれているようです。現在、この description タグはリーフ タグとみなされ、内部にネストされたタグを含めることはできません。いずれにしても、これは依然として問題であり、documentbuilder.parse(...)
これが無効な XML であることはわかっていますが、予想通り無効です。そのような入力を解析する方法について何かアイデアはありますか?
回避策
"xml" は invalid よりも悪いです - 整形式ではありません ; # を参照してください。整形式で有効な xml。
違反の予測可能性に関する非公式の評価は役に立ちません。テキストデータはxmlではありません。これに対処するのに役立つ、一貫性のある XML ツールやライブラリはありません。オプション、最初に理想的なもの:
- プロバイダー自身に問題を解決してもらいます。
整形式の XML が必要です。 (技術的には、整形式 xml という用語は冗長ですが、強調すると役立つかもしれません。)
- 寛容なタグ パーサーを使用する
xml に解析する前に問題を修正してください:
- スタンドアロン:
- スタンドアロンおよび c/c:
html tiny XML でも有効です。 taggle は c へのポート tagsoup です。
- python:
美しいスープ Python に基づいています。 パーサー間の違いセクションのコメントを参照してください。詳細については、この質問への回答も参照してください。 Python での不正なタグの処理に関するアドバイス 具体的には、lxml の recover=true オプション
が含まれます。
codecs.encodedfile() を使用して不正な文字をクリーンアップする方法については、この回答も参照してください。 - java:
tagsoup と jsoup は HTML に焦点を当てています。 filterinputstream
- xmlreadersettings.checkcharacters 可以 禁用以解决非法 xml 字符问题。
-
@jdweng 注释
xmlreadersettings。 conformancelevel
可以设置为conformancelevel.fragment
这样xmlreader
可以读取缺少根元素的 xml 格式良好的解析实体 . -
@jdweng 还报告
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。”
-
使用文本编辑器手动将数据处理为文本或 以编程方式使用字符/字符串函数。这样做 以编程方式可以从棘手到不可能作为 看起来是什么 可预测的往往不是——打破规则很少受到规则的约束。
-
对于无效字符错误,请使用正则表达式删除/替换无效字符:
-
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, '')
-
php:
对于与号,使用正则表达式将匹配项替换为
&
: 信用:blhsin,演示 p>&(?!(?:#\d+|#x[0-9a-f]+|\w+);)
ログイン後にコピー
-
请注意,上述正则表达式不会接受注释或 cdata
按照设计,标准 xml 解析器永远不会接受无效的 xml。
您唯一的选择是在解析输入之前预处理输入以删除“可预见的无效”内容,或将其包装在 cdata 中。
以上が無効な (エラー/不正な) XML を解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











2009 年の誕生以来、ビットコインは暗号通貨の世界のリーダーとなり、その価格は大きな変動を経験しました。包括的な歴史的概要を提供するために、この記事では 2009 年から 2025 年までのビットコイン価格データをまとめ、主要な市場イベント、市場センチメントの変化、価格変動に影響を与える重要な要因を取り上げます。

1. まず、Windows 11の下部にあるタスクバーの空白部分を右クリックし、[タスクバーの設定]を選択します。 2. タスクバー設定の右側にある [taskbarcorneroverflow] を見つけます。 3. 次に、その上にある [時計] または [時計] を見つけて選択し、オンにします。方法 2: 1. キーボード ショートカット [win+r] を押して [ファイル名を指定して実行] を呼び出し、[regedit] と入力して Enter キーを押して確定します。 2. レジストリエディタを開き、その中にある[HKEY_CURRENT_USERControlPanel]を見つけて削除します。 3. 削除後、コンピュータを再起動すると、システムに戻ると、設定を求めるプロンプトが表示されます。

回答: Java 関数型プログラミングの質問には、次のコミュニティ フォーラムおよびディスカッション グループが利用できます。 StackOverflow: Java 関数型プログラミングの専門家のコミュニティを備えた世界最大のプログラミング Q&A Web サイト。 JavaFunctionalProgramming: Java 関数型プログラミングに焦点を当てたコミュニティ フォーラムで、概念、言語機能、ベスト プラクティスについてのディスカッションを提供します。 Redditr/functionjava: Java の関数型プログラミングに焦点を当てたサブレディットで、ツール、ライブラリ、テクノロジに焦点を当てています。 Discord: JavaFunctional Programming: リアルタイムのディスカッション、コード共有、コラボレーションを提供する Discord サービス

他の人の Python コードを使用するにはどうすればよいですか?コード リポジトリを見つける: PyPI や GitHub などのプラットフォームで必要なコードを見つけます。インストール コード: pip を使用するか、GitHub リポジトリのクローンを作成してインストールします。モジュールのインポート: スクリプト内で import ステートメントを使用して、インストールされているモジュールをインポートします。コードの操作: モジュール内の関数とクラスにアクセスします。 (オプション) コードを調整する: プロジェクトに合わせて必要に応じてコードを変更します。

win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? win11 システムを使用するとき、誰もが時刻やカレンダーを設定しますが、多くのユーザーはコンピューターの時刻が常に間違っていると尋ねます。何が起こっているのでしょうか?ユーザーは下のタスクバーを直接クリックし、taskbarcorneroverflow を見つけてセットアップできます。このサイトでは、Win11 コンピューターの時刻誤差を調整する方法を詳しく紹介します。 Windows 11 でコンピューターの時刻エラーを調整する方法。方法 1: 1. まず、下のタスクバーの空白スペースを右クリックし、[タスクバーの設定] を選択します。方法 2: 1. キーボード ショートカット win+r を押して「ファイル名を指定して実行」を呼び出し、「regedit」と入力して Enter キーを押して確認します。

Java 関数開発における一般的な例外の種類とその修復方法 Java 関数の開発中に、関数の正しい実行に影響を与えるさまざまな例外が発生する可能性があります。一般的な例外の種類とその修復方法は次のとおりです。 1. NullPointerException 説明: 初期化されていないオブジェクトにアクセスするとスローされます。修正: オブジェクトを使用する前に、オブジェクトが null でないことを確認してください。サンプル コード: try{Stringname=null;System.out.println(name.length());}catch(NullPointerExceptione){

オーバーフローは、要素コンテンツがコンテナを超えた場合の表示モードを制御するために使用される CSS のプロパティです。 使用可能な値には、次のものが含まれます。オーバーフローコンテンツを表示するためにスクロールバーが表示されます auto: スクロールバーを表示するかどうかはブラウザが自動的に決定します accept: 親要素のオーバーフロー属性を継承します

世界的に有名なショートビデオプラットフォームとして、Douyin には巨大なユーザーベースとコンテンツクリエイターがいます。ただし、プラットフォームのルールは常に更新および改善されているため、一部のユーザーはアカウント禁止に遭遇する可能性があります。これにより、プラットフォーム管理の透明性と公平性について世間の疑問が生じています。この記事では、Douyin アカウントの禁止の問題と、アカウントが禁止された後にユーザーに異議を申し立てる方法があるかどうかについて説明します。 Douyin プラットフォームで禁止される理由は数多くあります。これには、違法なコンテンツ、プラットフォーム規制の違反、他人の権利の侵害などが含まれますが、これらに限定されません。プラットフォームの秩序とユーザーの利益を維持するために、Douyin は一連のルールとレビューメカニズムを確立しました。一部のユーザーがルールに違反した場合、そのアカウントは禁止される場合があります。ただし、一部のユーザーは禁止の理由に疑問を抱いたり、不満を抱いたりする可能性があります。