.Net XmlDocument无法加载导出为包含控制字符的xml的访问表

.Net XmlDocument无法加载导出为包含控制字符的xml的访问表,.net,xml,ms-access,.net,Xml,Ms Access,标题似乎有点长,但问题是: 我使用GUI将Access中的数据导出到xml文件中,鼠标右键单击表=>Export as=>xml。我想使用常规名称空间System.xml在.Net中加载这些xml文件。现在我有&男;charAscii:11在这个xml中。该字符位于标记的内部文本中。但它不是转义的,因此XmlDocument的Load函数会抛出一个错误,即这是一个无效字符。如何以良好的方式修复此问题?访问是否应该改善这一点?Net在这里有误导性吗 我有一个问题的答案见下文,但这似乎不是一个好答案

标题似乎有点长,但问题是: 我使用GUI将Access中的数据导出到xml文件中,鼠标右键单击表=>Export as=>xml。我想使用常规名称空间System.xml在.Net中加载这些xml文件。现在我有&男;charAscii:11在这个xml中。该字符位于标记的内部文本中。但它不是转义的,因此XmlDocument的Load函数会抛出一个错误,即这是一个无效字符。如何以良好的方式修复此问题?访问是否应该改善这一点?Net在这里有误导性吗

我有一个问题的答案见下文,但这似乎不是一个好答案

工作示例:

string xml = @"<?xml version=""1.0"" encoding=""UTF-8""?><root><tag>,- </tag></root>";
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.LoadXml(xml);
SO和Visual Studio都不显示无效字符,但它应该是可复制的。否则,在记事本++中打开并插入垂直选项卡,如下所示:


这正是Access表中的数据。该条目包含&male;文本中的符号。

这是我的解决方案优化将是StringBuilder,但我不喜欢我必须修复Microsoft生成的文件才能使用Microsoft framework

string escapeControl(char c)
{
    if ((c < 32 || c == 127) && !(c == 10 || c == 13))
        return string.Format("&#{0};", (int)c);
    return c.ToString();
}

string xml = File.ReadAllText(filename, Encoding.UTF8);
xml = xml.Select((e) => escapeControl(e)).Join("");
doc.LoadXml(xml);

请您的问题指定1如何从Access导出数据,例如VBA?中的Application.ExportXML,以及2控制字符出现的位置,例如作为字段数据?如果是,什么类型的字段?@GordThompson我希望这是您所期望的,并有助于回答这个问题。字符位于标记的内部文本中。-你能给我们举个例子吗?这是由字段名中的有趣字符引起的吗?@GordThompson我添加了一个工作示例来重现错误。