急待解决:两个结构相同的XML文件比较,提取添加,修改,删除的节点内容

yinglu206 2010-03-31 03:33:41
如果用XML遍历节点,效率应该很低,也比较麻烦,在网上找的还有DataSet,DataTable的方案。大家出出主意,帮小妹想想方案。谢谢了,我下周结贴。
如果有例子,我会加分的。我Xml只会基础的操作。不知道C#3.5有没有直接Find节点,比较节点的类库。
...全文
134 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinglu206 2010-04-09
  • 打赏
  • 举报
回复
这段时间忙,没来看回帖,没想到100分的帖子才这么少的回帖。
不过问题已经解决了,看来还说要靠自己。还说要谢谢你们哦。结贴了。
wanghui0380 2010-04-01
  • 打赏
  • 举报
回复
请确定判定标准,然后再说方案

要考虑的问题:是否有唯一标识字段和判定标准,数据格式样例

没这些前提的话,我们只能给你那种你认为的“无效率”的通用解
happyboyxq 2010-04-01
  • 打赏
  • 举报
回复
XmlDocument doc = new XmlDocument();
doc.Load(LoadPath);
XmlNode xn1 = doc.SelectSingleNode("root//address");
这样不就直接把address的节点读出来了吗。
adam 2010-04-01
  • 打赏
  • 举报
回复
HOW TO:使用 Visual C# .NET 通过 XPath 表达式查询 XML:

http://support.microsoft.com/kb/308333/zh-cn

blog:

http://hi.baidu.com/mycourt/blog/item/b7189c4b761f072a08f7ef65.html
http://www.blogjava.net/Rookie/archive/2008/01/10/174399.html
mjay0210 2010-04-01
  • 打赏
  • 举报
回复
只要是查找 无外乎 遍历 和 对应
一个是数组 一个是 字典

你要想完全脱离,只要考虑别用xml。 换种更合适的存储结构。不是说xml就是神,他只在扩展性上,性能真的不怎么地!
adam 2010-04-01
  • 打赏
  • 举报
回复
"books.xml" :
<?xml version="1.0" encoding="ISO-8859-1"?>

<bookstore>

<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>

<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>

<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>

<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>

</bookstore>

节点选取
set xmlDoc=CreateObject("Microsoft.XMLDOM")
xmlDoc.async="false"
xmlDoc.load("books.xml")

xmlDoc.selectNodes(路径表达式)

选取价格高于 35 的 price 价格
xmlDoc.selectNodes("/bookstore/book[price>35]/price")

选取价格高于 35 的 title 节点
xmlDoc.selectNodes("/bookstore/book[price>35]/title")
adam 2010-04-01
  • 打赏
  • 举报
回复
建议,使用XPath来处理,会对遍历效率有所提高,因为是先编译,后查找,比遍历的方法要优化一点。

-----------------------------------------------------------------------------------------
楼主给点分,1分不少,10分不多,拜谢!
楼主给点分,1分不少,10分不多,拜谢!
楼主给点分,1分不少,10分不多,拜谢!
楼主给点分,1分不少,10分不多,拜谢!
楼主给点分,1分不少,10分不多,拜谢!
楼主给点分,1分不少,10分不多,拜谢!
ouzui 2010-04-01
  • 打赏
  • 举报
回复
删除 和 追加 相似 一个RemoveChild,一个AppendChild。。。
yinglu206 2010-04-01
  • 打赏
  • 举报
回复
我现在还是选择了用XML循环遍历,XML文件比较复杂,只能选择用foreach循环遍历一个文件,然后再根据NodeName用XPath到另一个文件去找对应的Node,然后比较是删除了,还是修改了。不过添加的暂时还没有思路。哪位大侠做过啊,帮帮忙了!
springdream 2010-03-31
  • 打赏
  • 举报
回复
会基础的就可以,xml如果不复杂可以读到dataSet里,然后对dataTable进行查询,如dataTable.select('')效率应该可以满意,若比较复杂,还是老实用xpath吧。
liuh6 2010-03-31
  • 打赏
  • 举报
回复
需求不明确.
说个思路.把XML读取到DataSet里面.从DataSet里查找可否?这样效率快,但占资源.
别递烟哥不会 2010-03-31
  • 打赏
  • 举报
回复
我猜就是有find之类的方法,实质应该也是遍历,效率也不会提高多少额·

110,533

社区成员

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

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

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