XML十六进制无效字符的处理

XML十六进制无效字符的处理

在对生成的XML文件进行XSD验证时。提示“XML 十六进制值是无效的字符”。请看如下截图,如果出现这样的文字(比如ASCii打印字符等不可见字符)
按此在新窗口浏览图片
而且这种字符即时使用CDATD也还是报错的,所以必须使用替换的方式来实现,收集的网上代码,不做具体的研究,如果你也碰到了。请Copy吧:

 


public static string ReplaceLowOrderASCIICharacters(string tmp)
{
StringBuilder info = new StringBuilder();
foreach (char cc in tmp)
{
int ss = (int)cc;
if (((ss >= 0) && (ss <= 8)) || ((ss >= 11) && (ss <= 12)) || ((ss >= 14) && (ss <= 32)))
info.AppendFormat(" ", ss);//{0:X};
else info.Append(cc);
}
return info.ToString();
}

效率是有问题的,但因为我只是完成生成XML数据,所以如果您使用请注意实际生产环境。

 

 

加载或保存XML时引发的异常.System.ArgumentException: “”(十六进制值 0x1D)是无效的字符。
产生原因是xml文件中包含低位非打印字符造成的
处理方法:在产生xml文件的时候,过滤低位非打印字符

把一个字符串中的 低序位 ASCII 字符 替换成 &#x  字符
转换  ASCII  0 - 8  -> &#x0 - &#x8
转换  ASCII 11 - 12 -> &#xB - &#xC
转换  ASCII 14 - 31 -> &#xE - &#x1F

return System.Text.RegularExpressions.Regex.Replace(HttpUtility.HtmlEncode(str),@"[/x00-/x08]|[/x0B-/x0C]|[/x0E-/x1F]", "");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值