C# 操作大xml文件(200M),进行节点删除,有没有比较高效的办法

muscle090620118 2014-11-12 04:34:54
有一个特定格式的xml文件,但是文件很大,动辄上百兆,现在需要删除xml中的某些node,再保存。
目前傻瓜式做法是,定义一个XmlDocument,一次性load到内存,然后循环节点进行删除。
这样做会导致服务器内存爆掉的。。
想问下有没有类似步进读取并删除的方法,或者其他有没有什么高效的处理方式。
...全文
256 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dlx_2632641148 2014-11-13
  • 打赏
  • 举报
回复
操作删除XML文件节点 protected void Button1_Click(object sender, EventArgs e) { if (TextBox1.Text.Trim() != "") { XmlDocument doc = new XmlDocument(); doc.Load(Server.MapPath("LeaveWord.xml")); XmlNodeList nodes; XmlElement root = doc.DocumentElement; nodes = root.SelectNodes("descendant::LW[ID='" + TextBox1.Text.Trim() + "']"); foreach (XmlNode node in nodes) { root.RemoveChild(node); } TextBox1.Text = ""; Response.Write("<script>alert('恭喜你!删除成功');location=javascript:history:go(-1)</script>"); doc.Save(Server.MapPath("LeaveWord.xml")); XslTransform trans = new XslTransform(); trans.Load(Server.MapPath("LeaveWord.xsl")); Xml1.Document = doc; Xml1.Transform = trans; } else { Response.Write("<script>alert('请输入要删除的编号!');;location=javascript:history:go(-1)</script>"); } }
  • 打赏
  • 举报
回复
引用 楼主 muscle090620118 的回复:
想问下有没有类似步进读取并删除的方法,或者其他有没有什么高效的处理方式。
此时没有办法“并删除”。只能一边读取,一边复制到另一个200M的文件中——做为删除结果。
Pigeon汪 2014-11-13
  • 打赏
  • 举报
回复
XmlWriter 类:表示提供快速,非缓存的编写器,其中包含 XML 数据的非模式生成流或文件。 XmlReader 类:表示提供对 XML 数据进行快速、非缓存、只进访问的读取器。
threenewbee 2014-11-12
  • 打赏
  • 举报
回复
按照文本文件的方式逐行读取,如果你的xml有特定的结构,你能保证这一点的话。
save4me 2014-11-12
  • 打赏
  • 举报
回复
有没有试过微软MSDN上的修改大型 XML 文件的有效方法 虽然这篇文章很老,但是Performance: LINQ to XML vs XmlDocument vs XmlReader,这种方法效率还是不错的。 还有可以结合XmlReader和LinQ的XNode.ReadFrom 方法看一下
exception92 2014-11-12
  • 打赏
  • 举报
回复
一次性加载到内存太残暴,用1或者2楼的方法。
熙风 2014-11-12
  • 打赏
  • 举报
回复
你这是把xml当数据库在用啊
bdmh 2014-11-12
  • 打赏
  • 举报
回复
XmlTextReader
Forty2 2014-11-12
  • 打赏
  • 举报
回复
高效的办法,就是不要用xml作为大数据的存储。 抛开效率,内存问题倒是可以用XmlReader和XmlWriter来解决。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧