[解決済み] C# で無効な XML 文字をエスケープする
2023-03-05 10:53:56
質問
無効なXML文字が含まれる文字列があります。文字列を解析する前に、無効なXML文字をエスケープ(除去)するにはどうしたらよいでしょうか。
どのように解決するのですか?
無効なXML文字を削除する方法として、私はあなたが使用することをお勧めします。 XmlConvert.IsXmlChar メソッドを使用することをお勧めします。これは、.NET Framework 4以降に追加されたもので、Silverlightでも提供されています。以下は小さなサンプルです。
void Main() {
string content = "\v\f\0";
Console.WriteLine(IsValidXmlString(content)); // False
content = RemoveInvalidXmlChars(content);
Console.WriteLine(IsValidXmlString(content)); // True
}
static string RemoveInvalidXmlChars(string text) {
var validXmlChars = text.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray();
return new string(validXmlChars);
}
static bool IsValidXmlString(string text) {
try {
XmlConvert.VerifyXmlChars(text);
return true;
} catch {
return false;
}
}
また、無効なXML文字をエスケープする方法として、私は以下の方法を提案します。 XmlConvert.EncodeName メソッドを使用することをお勧めします。 以下は小さなサンプルです。
void Main() {
const string content = "\v\f\0";
Console.WriteLine(IsValidXmlString(content)); // False
string encoded = XmlConvert.EncodeName(content);
Console.WriteLine(IsValidXmlString(encoded)); // True
string decoded = XmlConvert.DecodeName(encoded);
Console.WriteLine(content == decoded); // True
}
static bool IsValidXmlString(string text) {
try {
XmlConvert.VerifyXmlChars(text);
return true;
} catch {
return false;
}
}
更新しました。 エンコード処理では、ソース文字列の長さ以上の長さの文字列が生成されることに言及しておく必要があります。これは、エンコードされた文字列をデータベース内の長さ制限のある文字列カラムに格納し、データカラムの制限に合うようにアプリ内でソース文字列の長さを検証する場合に重要になる場合があります。
関連
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] ディープクローンオブジェクト
-
[解決済み] C#で文字列のエンコーディングを手動で指定せずに、一貫性のあるバイト表現を得るには?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] XMLの<![CDATA[]]>は何を意味するのですか?
-
[解決済み] XMLを解析して、特定のノード属性のインスタンスをカウントするには?
-
[解決済み] .NETでフォーマット文字列のブレース(中括弧)をエスケープする方法
-
[解決済み] XML文書でエスケープする必要がある文字は何ですか?
-
[解決済み] razor viewエンジンでの@文字のエスケープ
-
[解決済み] XMLのアンパサンドをエスケープして、HTMLで実体として表示するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み] DBNullから他の型にオブジェクトをキャストすることができない
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] 2つのリストを結合する
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み] EntityName のパース中にエラーが発生しました。1 行目、位置 844
-
[解決済み] XHTMLの自己完結型タグを除くオープンタグにマッチするRegEx
-
[解決済み】XMLで無効な文字とは?