Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否在将字符串加载到XML文档对象之前删除所有十六进制字符?_C#_.net_Xml_Character Encoding - Fatal编程技术网

C# 是否在将字符串加载到XML文档对象之前删除所有十六进制字符?

C# 是否在将字符串加载到XML文档对象之前删除所有十六进制字符?,c#,.net,xml,character-encoding,C#,.net,Xml,Character Encoding,我有一个xml字符串正在发布到服务器上的ashx处理程序。xml字符串构建在客户端,基于表单上的几个不同条目。有时,一些用户会从其他来源复制并粘贴到web表单中。当我尝试使用xmldoc.LoadXml(xmlStr)将xml字符串加载到XMLDocument对象中时,出现以下异常: System.Xml.XmlException = {"'', hexadecimal value 0x0B, is an invalid character. Line 2, position 1."} 在调试

我有一个xml字符串正在发布到服务器上的ashx处理程序。xml字符串构建在客户端,基于表单上的几个不同条目。有时,一些用户会从其他来源复制并粘贴到web表单中。当我尝试使用
xmldoc.LoadXml(xmlStr)
将xml字符串加载到
XMLDocument
对象中时,出现以下异常:

System.Xml.XmlException = {"'', hexadecimal value 0x0B, is an invalid character. Line 2, position 1."}
在调试模式下,我可以看到流氓角色(对不起,我不确定它的正式名称?)

我的问题是,在尝试将xml字符串加载到XMLDocument对象之前,如何清理它?我需要一个自定义函数来逐个解析所有这些类型的字符,还是可以使用一些原生的.NET4类来删除它们


这里有一个使用
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, "");   
 }   

在XmlReaderSettings中使用CheckCharacters标志是避免在无效XML字符上出错的更有效的方法

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);
    }
}

我猜你指的是“流氓”角色。胭脂是法语中“红色”的意思。在XML中留下非法字符不是很危险吗?如果存在非法字符,则不应将其另存为XML。您可能希望另存为纯文本。该文件还说,“字符检查不包括检查XML名称中的非法字符或检查所有XML名称是否有效。这些检查是一致性检查的一部分,并且始终会执行。”@sk md该问题询问了如何避免在加载带有无效字符的XML文档时出错。如果文档非常大,则在读取文档时删除无效字符会更有效,而不是先进行清理。