gpt4 book ai didi

c# - XDocument 防止无效字符

转载 作者:行者123 更新时间:2023-11-30 22:29:42 26 4
gpt4 key购买 nike

我正在使用 XDocument 来保存某种数据库。这个数据库由注册的聊天机器人组成,我只是有许多具有“用户名”、“所有者”等属性的“机器人”节点。然而,偶尔一些聪明人决定制作一个具有非常奇怪角色作为属性之一的机器人。这使得 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com