我找到了一种清除无效字符的 XML 文件的方法,效果很好,但速度有点慢。清洁需要大约 10-20 秒,用户不喜欢。
使用 streamread/write 创建一个干净的文件然后使用 xmlreader 似乎浪费了大量时间,是否可以在 XMLread 期间清理行或至少使用 streamReader 作为 XMLreader 的输入以节省保存文件的时间?
我试图让创建数据库的团队在上传之前创建干净的文件,但这是一个缓慢的过程......
XmlReaderSettings settings = new XmlReaderSettings { CheckCharacters = false};
cleanDatabase = createCleanSDDB(database);
using (XmlReader sddbReader = XmlReader.Create(cleanDatabase, settings))
{ //Parse XML... }
private string createCleanSDDB(String sddbPath)
{
string fileName = getTmpFileName(); // get a temporary file name from the OS
string line;
string cleanLine;
using (StreamReader streamReader = new StreamReader(sddbPath, Encoding.UTF8))
using (StreamWriter streamWriter = new StreamWriter(fileName))
{
while ((line = streamReader.ReadLine()) != null)
{
cleanLine = getCleanLine(line);
streamWriter.WriteLine(cleanLine);
}
}
return fileName;
}
private string getCleanLine(string dirtyLine)
{
const string regexPattern = @"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF]";
string cleanLine = Regex.Replace(dirtyLine, regexPattern, "");
return cleanLine;
}