我正在使用XDocument来保留某种数据库。这个数据库由注册的chatterbots组成,我只是拥有许多具有属性的“ bot”节点,例如“用户名”,“所有者”等。但是,偶尔会有一些聪明的人决定将具有非常奇怪角色的机器人作为属性之一。这使得XDocument类系列在每次读取该节点时都将引发异常,这是一个非常大的问题,因为一旦遇到无效字符,数据库就会停止写入文件,从而导致数据库无法完全保存。
我的问题是-是否有一个类似于XSomething.IsValidString(string s)
的简单方法,因此我可以省略有问题的数据?我的数据库不是官方数据库,仅是个人使用,因此不一定要包含不良数据。
我正在使用的一些代码(变量file
是XDocument):
保存:file.Save(Path.Combine(Environment.CurrentDirectory, "bots.xml"));
要加载(在检查File.Exists()
等之后):file = XDocument.Load(Path.Combine(Environment.CurrentDirectory, "bots.xml"));
要添加到数据库(变量都是字符串):
file.Root.Add(new XElement("bot",
new XAttribute("username", botusername),
new XAttribute("type", type),
new XAttribute("botversion", botversion),
new XAttribute("bdsversion", bdsversion),
new XAttribute("owner", owner),
new XAttribute("trigger", trigger)));
请原谅我缺乏适当的XML技术,我才刚刚开始。我要问的是是否有
XSomething.IsValidString(string s)
方法,而不是XML多么糟糕。好的,我再次遇到了异常,这是确切的消息和堆栈跟踪。
System.ArgumentException: '', hexadecimal value 0x07, is an invalid character.
at System.Xml.XmlUtf8RawTextWriter.InvalidXmlChar(Int32 ch, Byte* pDst, Boolean entitize)
at System.Xml.XmlUtf8RawTextWriter.WriteAttributeTextBlock(Char* pSrc, Char* pSrcEnd)
at System.Xml.XmlUtf8RawTextWriter.WriteString(String text)
at System.Xml.XmlUtf8RawTextWriterIndent.WriteString(String text)
at System.Xml.XmlWellFormedWriter.WriteString(String text)
at System.Xml.XmlWriter.WriteAttributeString(String prefix, String localName, String ns, String value)
at System.Xml.Linq.ElementWriter.WriteStartElement(XElement e)
at System.Xml.Linq.ElementWriter.WriteElement(XElement e)
at System.Xml.Linq.XElement.WriteTo(XmlWriter writer)
at System.Xml.Linq.XContainer.WriteContentTo(XmlWriter writer)
at System.Xml.Linq.XDocument.WriteTo(XmlWriter writer)
at System.Xml.Linq.XDocument.Save(String fileName, SaveOptions options)
at System.Xml.Linq.XDocument.Save(String fileName)
at /* my code stack trace omitted */
最佳答案
尝试更改文件。保存以下代码行:
XmlWriterSettings settings = new XmlWriterSettings();
settings.CheckCharacters = false;
XmlWriter writer = XmlWriter.Create(Path.Combine(Environment.CurrentDirectory, "bots.xml"), settings);
file.Save(writer);
来源:http://sartorialsolutions.wordpress.com/page/2/
关于c# - XDocument防止无效字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10057171/