【请教】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>
...全文
149 点赞 收藏 13
写回复
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日
寒江易雪_王孙 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");
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告