HOW TO:在 Visual C# .NET 中使用 System.Xml 合并两个 XML 文档中的数据

本文介绍在 Visual C#.NET 中使用 System.Xml 合并两个 XML 文档数据的方法。先说明了所需环境,接着展示创建两个 XML 文件的步骤,然后给出创建 Visual C#.NET 应用程序的代码,最后探讨不同结构 XML 文档的合并方案。

HOW TO:在 Visual C# .NET 中使用 System.Xml 合并两个 XML 文档中的数据

 

概要

本分步指导文章说明了如何使用 DataSet 对象合并两个 XML 文档。在使用 ADO.NET 支持断开连接的、分布式的数据方案时,DataSet(数据集)对象是关键所在。数据集是数据在内存中的表示形式,它提供了一致的关系编程模型,而不用关心数据源的位置。数据集表示完整的一组数据,包括相关的表、约束以及各表之间的关系。

要求

下面的列表列出了推荐使用的硬件、软件、网络结构以及所需的 Service Pack:
  • Microsoft Windows XP、Windows 2000 或 Windows NT 4.0 Service Pack 6a (SP6a)
  • Microsoft Visual Studio .NET
本文假定您熟悉下列主题:
  • Visual C# .NET 语法
  • 可扩展标记语言 (XML)

创建 Books1.xml 文件

  1. 从 Windows 开始菜单,单击运行,键入 Notepad.exe,然后单击确定
  2. 突出显示以下代码,右键单击突出显示的内容,然后单击复制。在"记事本"中,在编辑菜单上,单击粘贴
    <?xml version='1.0' encoding='utf-16'?>
    <catalog>
    <book id="bk101">
    <author>Gambardella, Matthew</author>
    <title>XML Developer's Guide</title>
    <genre>Computer</genre>
    <price>44.95</price>
    </book>
    <book id="bk102">
    <author>Jeanette, Dasha</author>
    <title>Quack the Duck</title>
    <genre>Fantasy</genre>
    <price>5.95</price>
    </book>
    </catalog>
  3. 文件菜单上,单击保存
  4. 另存为对话框中,在保存类型下拉列表框中,单击所有文件。在文件名文本框中,键入 Books1.xml,然后单击保存

创建 Books2.xml 文件

  1. 在"记事本"中,新建一个名为 Books2.xml 的文本文件。
  2. 复制以下 XML 并将其粘贴到 Books2.xml 中:
    <?xml version='1.0' encoding='utf-16'?>
    <catalog>
    <book id="bk106">
    <author>Randall, Cynthia</author>
    <title>Lover Birds</title>
    <genre>Romance</genre>
    <price>4.95</price>
    </book>
    <book id="bk107">
    <author>Vinzovskaia, Irina</author>
    <title>Piano Fort A</title>
    <genre>Romance</genre>
    <price>4.95</price>
    </book>
    </catalog>
  3. 文件菜单上,单击保存
  4. 另存为对话框中,在保存类型下拉列表框中,单击所有文件。在文件名文本框中,键入 Books2.xml,然后单击保存

创建 Visual C# .NET 应用程序的步骤

  1. 启动 Visual Studio .NET,然后新建一个 Visual C# 控制台应用程序项目。
  2. 将下面的代码添加到"代码"窗口顶部:
    using System;
    using System.Xml;
    using System.IO;
    using System.Data ;
  3. 复制以下代码并将其粘贴到 static void Main(string[] args) 中:
    try
    	{
    		XmlTextReader xmlreader1 = new XmlTextReader("C://Books1.xml");
    		XmlTextReader xmlreader2 = new XmlTextReader("C://Books2.xml");
    
    		DataSet ds = new DataSet();
    		s.ReadXml(xmlreader1);
    		DataSet ds2 = new DataSet();
    		ds2.ReadXml(xmlreader2);
    		ds.Merge(ds2);
    		ds.WriteXml("C://Books.xml");
    		Console.WriteLine("Completed merging XML documents");
    	}
    	catch (System.Exception ex)
    	{
    		Console.Write(ex.Message);
    	}
    Console.Read();	
  4. 生成并运行该应用程序。请注意,"控制台"窗口中会显示消息:Completed merging XML documents(XML 文档合并完成)。
  5. 关闭"控制台"窗口。请注意,Books.xml 文件已在您指定的路径中创建出来。
  6. 打开 Books.xml。请注意,Books2.xml 中的数据已附加到 Books1.xml 的末尾。

不同的 XML 文档方案

合并具有相同结构的 XML 文档
前面的 Visual C# .NET 示例演示了具有相同结构的 XML 文档的输出。

合并具有不同结构的 XML 文档
  1. 打开 Books2.xml,然后将 XML 替换为以下 XML:
    <?xml version="1.0" ?>
    <SampleData>
    <Customer>
    <CustomerName>Bob Frapples</CustomerName>
    <PricePerUnit>5.95</PricePerUnit>
    <ClosingDate>2001-12-16</ClosingDate>
    </Customer>
    <Customer>
    <CustomerName>Bob Frapples</CustomerName>
    <PricePerUnit>5.95</PricePerUnit>
    <ClosingDate>2001-12-16</ClosingDate>
    </Customer>
    </SampleData>
  2. 保存 Books2.xml。
  3. 再次运行 Visual C# .NET 项目。请注意,第二个文档 (Books2.xml) 的节点已附加到第一个 XML 文档 (Books1.xml) 中。
合并具有相似结构的 XML 文档(第二个文档包含其他元素)
  1. 打开 Books2.xml,将其中的 XML 替换为以下 XML:
    <?xml version='1.0' encoding='utf-16'?>
    <catalog>
    <book id="bk106">
    <author>Randall, Cynthia</author>
    <title>Lover Birds</title>
    <genre>Romance</genre>
    <price>4.95</price>
    <publish_date>2000-09-02</publish_date>
    <description>When Carla meets Paul at an ornithology 
    conference, tempers fly as feathers get ruffled.</description>
    </book>
    <book id="bk107">
    <author>Vinzovskaia, Irina</author>
    <title>Piano Fort A</title>
    <genre>Romance</genre>
    <price>4.95</price>
    <publish_date>2000-11-02</publish_date>
    <description>Two young pianists strike a chord when they fight a 
    pitched battle to stop the metro gnomes at a key base.</description>
    </book>
    </catalog>
  2. 保存 Books2.xml。
  3. 再次运行 Visual C# .NET 项目。请注意,第二个文档的节点已附加到第一个 XML 文档中。
合并具有相似结构的 XML 文档(第二个文档包含属性)
  1. 打开 Books2.xml,将其中的 XML 替换为以下 XML:
    <?xml version='1.0' encoding='utf-16'?>
    <catalog>
    <book id="bk106" genre="Romance">
    <author>Randall, Cynthia</author>
    <title>Lover Birds</title>
    <price>4.95</price>
    </book>
    <book id="bk107" genre="Romance">
    <author>Vinzovskaia, Irina</author>
    <title>Piano Fort A</title>
    <price>4.95</price>
    </book>
    <book id="bk108" genre="Horror">
    <author>de Dogg, Jazz</author>
    <title>Night of the Flea</title>
    <price>4.95</price>
    </book>
    </catalog>
  2. 保存 Books2.xml。
  3. 再次运行 Visual C# .NET 项目。请注意,第二个文档中的节点已附加到第一个 XML 文档中,结构与第一个 XML 文档相同。
合并具有相似结构的 XML 文档(第一个文档包含属性)
  1. 按照以下方式修改 Visual C# 代码,以便将 Books1.xml 附加到 Books2.xml 中:
    try
    	{
    		XmlTextReader xmlreader1 = new XmlTextReader("C://Books2.xml");
    		XmlTextReader xmlreader2 = new XmlTextReader("C://Books1.xml");
    
    		DataSet ds = new DataSet();
    		s.ReadXml(xmlreader1);
    		DataSet ds2 = new DataSet();
    		ds2.ReadXml(xmlreader2);
    		ds.Merge(ds2);
    		ds.WriteXml("C://Books.xml");
    		Console.WriteLine("Completed merging XML documents");
    	}
    	catch (System.Exception ex)
    	{
    		Console.Write(ex.Message);
    	}
    Console.Read();	
  2. 再次运行 Visual C# .NET 项目。请注意,生成的 XML 文档将 Books1.xml 中的节点附加到了 Books2.xml 中。另外您会注意到,所有的 Book 节点都包含"genre"属性。

    因此,根据第一个 XML 文档的结构,需要对第二个 XML 文档加以修改以便使生成的 XML 更有意义
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值