我使用的XDocument保持一个形式的数据库。 该数据库由注册chatterbots的,我只是有很多“僵尸”与属性,比如“用户名”,“老板”,而这样的节点。 然而,偶尔有些聪明的家伙决定让一个机器人有一个很奇怪的字符作为属性之一。 这使得因为数据库不能完全保存,因为它停止,因为它击中无效字符尽快写入文件中的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 */