【请教】xml文件合并

gerrynj 2011-10-21 03:49:00
在c#中利用dataset1.Merge(dataset2)方法把2个xml文件装合并为1个,参考的是http://support.microsoft.com/kb/311530
使用例子中的两个xml完全可以,但使用我自己的两个xml,合并的效果就不是想象中的了,请高手指点!待合并的2个xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Reasonxml>
<label id="1">
<chgs>
<change>
<datacount>23</datacount>
</change>
</chgs>
</label>
</Reasonxml>

<?xml version="1.0" encoding="utf-8"?>
<Reasonxml>
<label id="2">
<chgs>
<change>
<datacount>82</datacount>
</change>
</chgs>
</label>
</Reasonxml>

期待结果是:
<?xml version="1.0" encoding="utf-8"?>
<Reasonxml>
<label id="1">
<chgs>
<change>
<datacount>23</datacount>
</change>
</chgs>
</label>
<label id="2">
<chgs>
<change>
<datacount>82</datacount>
</change>
</chgs>
</label>
</Reasonxml>

但最终结果是
<?xml version="1.0" encoding="utf-8"?>
<Reasonxml>
<label id="1">
<chgs>
<change>
<datacount>23</datacount>
</change>
<change>
<datacount>82</datacount>
</change>
</chgs>
</label>
</Reasonxml>
...全文
227 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gerrynj 2011-10-24
  • 打赏
  • 举报
回复
非常感谢各位的答案!有2个经过测试都能达到我要的效果,看来还是得做好基础学习,呵呵
wujixuanwhy 2011-10-22
  • 打赏
  • 举报
回复
谢谢分享
sdl2005lyx 2011-10-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy945 的回复:]

例子中没有嵌套结构,你的XML中有嵌套结构,所以在Merge的时候和你预想的不一致

用下面的代码
C# code

XmlDocument doc1 = new XmlDocument(), doc2 = new XmlDocument();
doc1.Load("H:\\books1.xml");
doc2.Load("……
[/Quote]

这个可以,楼主测试一下。。。
山东蓝鸟贵薪 2011-10-22
  • 打赏
  • 举报
回复
楼主呀,还没有搞定呀
给你一个我编写的XML的实例程序还有源代码
图如下:

下载地址如下:
http://download.csdn.net/detail/sgzhou12345/3706868
注明:
  解压密码,只有“关注”我的人才知道噢~_!
yojinlin 2011-10-22
  • 打赏
  • 举报
回复
路過。
阿非 2011-10-21
  • 打赏
  • 举报
回复
例子中没有嵌套结构,你的XML中有嵌套结构,所以在Merge的时候和你预想的不一致

用下面的代码

XmlDocument doc1 = new XmlDocument(), doc2 = new XmlDocument();
doc1.Load("H:\\books1.xml");
doc2.Load("H:\\books2.xml");
foreach (XmlNode node in doc2.ChildNodes[1].ChildNodes)
{
doc1.ChildNodes[1].AppendChild(doc1.ImportNode(node, true));
}
doc1.Save("H:\\book.xml");


宝_爸 2011-10-21
  • 打赏
  • 举报
回复
说实话,我觉得Dataset合并的比lz期待的结果要好。
山东蓝鸟贵薪 2011-10-21
  • 打赏
  • 举报
回复
你要可以将第一个xml读取,
再读取第二个xml
重新写成一个新的xml
即可
机器人 2011-10-21
  • 打赏
  • 举报
回复
DataTable 设主键了么?
欢乐的小猪 2011-10-21
  • 打赏
  • 举报
回复
XmlDocument xml1 = new XmlDocument();
XmlDocument xml2 = new XmlDocument();
xml1.Load(@"D:\1.xml");
xml2.Load(@"d:\2.xml");
XmlNodeList nodelist= xml2.SelectNodes("//label");
XmlNode root = xml1.SelectSingleNode("//Reasonxml");
foreach (XmlNode node in nodelist)
{
XmlNode n= xml1.CreateNode (node.NodeType ,node.Name ,node.NamespaceURI );
n.InnerXml = node.InnerXml;
root.AppendChild(n);
}

xml1.Save(@"d:\1.xml");
Console.ReadKey();
萧炎 2011-10-21
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
用LS的方法,不要用Merger...
用XMLDocument去加载,Element去添加结点
也可以用StreamReader把数据读成字符串,然后用StreamWriter往XML文件里写
sp951 2011-10-21
  • 打赏
  • 举报
回复
XmlDocument doc = new XmlDocument();
doc.Load("D:\\1.xml");
XmlDocument doc2 = new XmlDocument();
doc2.Load("D:\\2.xml");

XmlElement element = doc.CreateElement(doc2.DocumentElement.ChildNodes[0].Name);
for (int i = 0; i < doc2.DocumentElement.ChildNodes[0].Attributes.Count; i++)
{
XmlAttribute attribut = doc2.DocumentElement.ChildNodes[0].Attributes[i];
XmlAttribute att = doc.CreateAttribute(attribut.Name);
att.InnerXml = attribut.InnerXml;
element.Attributes.Append(att);
}
element.InnerXml = doc2.DocumentElement.ChildNodes[0].InnerXml;

doc.DocumentElement.AppendChild(element);
doc.Save("D:\\3.xml");

111,092

社区成员

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

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

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