由于是读取即时数据,所以目标xml文件更新较频繁。
问题就出现在于:当目标xml文件正在更新数据而重新生成时,用XmlDocumen读取解析便会出现xml标签未闭合的错误,而导致程序自动退出,我尝试加入try {}扑捉错误 进一步处理,但没有效果.
我想要的效果是:无论ReadXML()方法是否正确解析,都循环执行,当然出现解析错误则忽略后重新执行读取解析。
以下是ReadXML()方法代码片段:
private void ReadXML()
{
try {
XmlDocument doc = new XmlDocument();
doc.Load(bookstore.xml);//读取文件
XmlNode root=xmlDoc.SelectSingleNode("bookstore");//查找<bookstore>
......
...
//进一步处理xml数据(略)
} catch {
ReadXML() ; //重新执行本方法
}
}
建议用FileStream的读写互斥性进行控制
应该是是你的WriteXml()方法有错误,如果写xml文档的时候即使语法不合规范,比如没有头标签<!DOCTYPE>,有<a>标签没</a>,文档照样保存不会异常,当去读的时候就会有错误。如果文档中的一个标签出现错误还要继续读的时候,在for循环中用'contiue'跳过就可以了,不过可能读出一堆字符串,不是你想要的结果。
文件不能在写的时候供另一个人读,因为没保存。
如果 在catch块中调用本体方法,就会一直捕获异常,重新运行方法而生成异常,再被捕获,再调用本方法,死循环下去。
也可以在更新文档的时候生成一个新的文档,更新新的文档之后替换旧的文档,这样在更新文档时,读者读的是旧文档。
可以单例模式,读和写都用同一个XmlDocument对象。