CSDN博客

img PeterPlus

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

发表于2004/9/28 16:17:00  1632人阅读

分类: .NET

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 更有意义
阅读全文
0 0

相关文章推荐

img
取 消
img