我有一个用XML属性修饰的类,例如[XmlAttribute(“att”)]。我的目标是使用此类的xml创建一个XDocument。一切都很好,除了偶尔从外部进入场景的'0x1f'字符。所以我自然会尝试更换它:
XmlSerializer serializer = new XmlSerializer(this.GetType());
StringWriter sw = new StringWriter();
serializer.Serialize(sw, this);
string s = sw.ToString();
s = s.Replace((char)0x1F, ' ');
XDocument xs = XDocument.Parse(s);
return xs;
但是我仍然收到错误:“'',十六进制值0x1F,是一个无效字符。”
只是为了进行健全性检查,这是一个截图: http://i.imgur.com/jZRWg.png
我可能出错的任何想法?
答案 0 :(得分:2)
如果它被表示为一个实体,你会得到相同的答案 - 也许这就是发生了什么?请看s
以确定。
样品:
using System;
using System.Xml.Linq;
class Test
{
static void Main()
{
string xml = "<foo></foo>";
XDocument.Parse(xml);
}
}
答案 1 :(得分:2)
字符x1F在XML 1.0中不合法。所以XML解析器会拒绝它。它在XML 1.1中是合法的,只要它是以转义形式
编写的 - 但不是每个人都支持XML 1.1。最好的办法是弄清楚这个角色进入系统的位置,并在源头阻止它发生。
答案 2 :(得分:1)
对我而言,如果您尝试使用字符串而不是char替换,则会出现一些问题。我建议使用两者来尝试一些测试值,看看它们出现了什么。另外你如何引用它有一定的效果。
var a = x.IndexOf('\u001f'); // 513
var b = x.IndexOf(Convert.ToString((byte)0x1F)); // -1
x = x.Replace(Convert.ToChar((byte)0x1F), ' '); // Works
x = x.Replace(Convert.ToString((byte)0x1F), " "); // Fails