2013-10-16 15 views
8

xml文字列がサーバー上のashxハンドラに送信されています。 xml文字列はクライアント側で作成され、フォーム上に作成されたいくつかの異なるエントリに基づいています。場合によっては、一部のユーザーが他のソースからコピーしてWebフォームに貼り付けることがあります。私はxmldoc.LoadXml(xmlStr)は、私は次の例外を取得使用してXMLDocumentオブジェクトにXML文字列をロードしようとすると:(?申し訳ありませんが、私はそれが正式タイトルだのか分からない)文字列をXMLドキュメントオブジェクトにロードする前にすべての16進文字を削除しますか?

System.Xml.XmlException = {"'', hexadecimal value 0x0B, is an invalid character. Line 2, position 1."} 

は、デバッグモードでは、私は不正な文字を見ることができました:

私はXMLDocumentオブジェクトに読み込もうとする前にXML文字列をどのようにサニタイズできますか?これらのすべての種類の文字を1つずつ解析するカスタム関数が必要ですか、またはそれらを削除するためにネイティブ.NET4クラスを使用できますか?ここで

Rogue character in debug mode

+0

「不正な」文字を意味すると見なします。ルージュは "赤"のフランス語です。 – Nyerguds

答えて

23

あなたはRegexを使用してXML無効な文字をきれいにする例があります。

xmlString = CleanInvalidXmlChars(xmlString); 
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xmlString); 

public static string CleanInvalidXmlChars(string text) 
{ 
    string re = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]"; 
    return Regex.Replace(text, re, ""); 
} 
2

無効なXML文字の上に出てエラーではないために、より効率的な方法は、XmlReaderSettingsでCheckCharactersフラグを使用することです。

var xmlDoc = new XmlDocument(); 
var xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false }; 
using (var stringReader = new StringReader(xml)) { 
    using (var xmlReader = XmlReader.Create(stringReader, xmlReaderSettings)) { 
     xmlDoc.Load(xmlReader); 
    } 
} 
関連する問題