xml - 表示 - 開始 タグ 終了 タグ 対応 し てい ませ ん




XMLの無効な文字 (10)

C#で潜在的に望ましくないXML / XHTML文字をエスケープするもう1つの簡単な方法は次のとおりです。

WebUtility.HtmlEncode(stringWithStrangeChars)

私は現時点でいくつかのXMLを扱っています。

私は以下のような文字列を保持するノードを持っています:

<node>This is a string</node>

ノードに渡す文字列の中には、&、#、$などの文字があります。

<node>This is a string & so is this</node>

これは、

私はこれらの文字列をそのままCDATAにラップすることはできません。 私はCDATAの中にいなくてもXMLノードに入れられない文字のリストをオンラインで探してみました。

誰かが私を1つの方向に向けるか、違法な文字のリストを私に提供することができますか?


Javaの人々のために、ApacheにはヘルパーメソッドescapeXmlを持つユーティリティクラス(StringEscapeUtils)があり、XMLエンティティを使用して文字列のエスケープに使用できます。


XSL(本当に怠惰な日に)私は使用します:

capture="&amp;(?!amp;)" capturereplace="&amp;amp;"

påampの後にないすべての&記号を翻訳する。 適切なものに。

入力がCDATAにある場合がありますが、XMLを使用するシステムでは考慮されません。 それはちょっとした修正です、注意してください...


XmlConvert.IsXmlCharメソッドを使用してC#で間違ったXML文字を削除する別の方法 (.NET Framework 4.0以降で使用可能)

public static string RemoveInvalidXmlChars(string content)
{
   return new string(content.Where(ch => System.Xml.XmlConvert.IsXmlChar(ch)).ToArray());
}

すべての文字がXML有効であることを確認することができます。

public static bool CheckValidXmlChars(string content)
{
   return content.All(ch => System.Xml.XmlConvert.IsXmlChar(ch));
}

.Net Fiddle - https://dotnetfiddle.net/v1TNus

たとえば、垂直タブ記号(\ v)はXMLには有効ではありませんが、有効なUTF-8ですが有効なXML 1.0ではなく、多くのライブラリ(libxml2を含む)でもそれを見落とし、無効なXMLを出力します。


この答えは私のために働いた

string code = Regex.Replace(item.Code, @"[\u0000-\u0008,\u000B,\u000C,\u000E-\u001F]", "");

ブログへのリンクの詳細


これは、文字列からXML無効な文字を削除し、新しい有効な文字列を返すC#コードです。

public static string CleanInvalidXmlChars(string text) 
{ 
    // From xml spec valid chars: 
    // #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]     
    // any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. 
    string re = @"[^\x09\x0A\x0D\x20-\uD7FF\uE000-\uFFFD\u10000-\u10FFFF]"; 
    return Regex.Replace(text, re, ""); 
}

不正な文字は&<および> (および属性の"または' )です。

それらはXMLエンティティを使用してエスケープされ&amp;この場合、 &amp; &ために。

しかし、実際には、XMLを書くツールやライブラリを使用して、このようなことをあなたのために抽象化して、心配する必要はありません。



要約すると、テキスト内の有効な文字は次のとおりです。

  • タブ、ラインフィード、キャリッジリターン、
  • &と<; を除くすべての非制御文字が有効です。
  • >は、]の後に続くと有効ではありません]。

XML仕様の第2.2節と第2.4節では、答えを詳細に示しています。

キャラクター

法的文字は、タブ、改行、改行、およびUnicodeとISO / IEC 10646の有効な文字です

文字データ

アンパサンド文字(&)と左角カッコ(<)は、マークアップ区切り記号として使用する場合、またはコメント、処理命令、またはCDATAセクション内で使用する場合を除き、リテラル形式では使用できません。 それらが他の場所で必要とされる場合は、数値文字参照または文字列 "&"と "<"をそれぞれ使用してエスケープする必要があります。 直角括弧(>)は文字列 ">"を使用して表現することができ、文字列 "]]>"にコンテンツが現れるときは互換性のために ">"または文字参照を使用してエスケープする必要があります。 stringはCDATAセクションの終わりをマークしていません。


誰でもこのSystem.Security.SecurityElement.Escape(yourstring)試しましたか? これは、文字列中の無効なXML文字を、有効な同等のものに置き換えます





illegal-characters