311530 HOW TO:在 Visual C# .NET 中使用 System.Xml 合并两个 XML 文档中的数据 (From MKBA)
本文的发布号曾为 CHS311530
有关本文的 Microsoft Visual Basic .NET 版本,请参见
308066。
本文引用下面的 Microsoft .NET 框架类库名称空间:
本文引用下面的 Microsoft .NET 框架类库名称空间:
- System.Xml
- System.Io
- System.Data
本任务的内容
- 概要
要求创建 Books1.xml 文件创建 Books2.xml 文件创建 Visual C# .NET 应用程序的步骤不同的 XML 文档方案
合并具有相同结构的 XML 文档合并具有不同结构的 XML 文档合并具有相似结构的 XML 文档(第二个文档包含其他元素)合并具有相似结构的 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 文件
- 从 Windows 开始菜单,单击运行,键入 Notepad.exe,然后单击确定。
- 突出显示以下代码,右键单击突出显示的内容,然后单击复制。在"记事本"中,在编辑菜单上,单击粘贴。
<?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>
- 在文件菜单上,单击保存。
- 在另存为对话框中,在保存类型下拉列表框中,单击所有文件。在文件名文本框中,键入 Books1.xml,然后单击保存。
创建 Books2.xml 文件
- 在"记事本"中,新建一个名为 Books2.xml 的文本文件。
- 复制以下 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>
- 在文件菜单上,单击保存。
- 在另存为对话框中,在保存类型下拉列表框中,单击所有文件。在文件名文本框中,键入 Books2.xml,然后单击保存。
创建 Visual C# .NET 应用程序的步骤
- 启动 Visual Studio .NET,然后新建一个 Visual C# 控制台应用程序项目。
- 将下面的代码添加到"代码"窗口顶部:
using System; using System.Xml; using System.IO; using System.Data ;
- 复制以下代码并将其粘贴到 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();
- 生成并运行该应用程序。请注意,"控制台"窗口中会显示消息:Completed merging XML documents(XML 文档合并完成)。
- 关闭"控制台"窗口。请注意,Books.xml 文件已在您指定的路径中创建出来。
- 打开 Books.xml。请注意,Books2.xml 中的数据已附加到 Books1.xml 的末尾。
不同的 XML 文档方案
合并具有相同结构的 XML 文档
前面的 Visual C# .NET 示例演示了具有相同结构的 XML 文档的输出。返回页首
合并具有不同结构的 XML 文档
- 打开 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>
- 保存 Books2.xml。
- 再次运行 Visual C# .NET 项目。请注意,第二个文档 (Books2.xml) 的节点已附加到第一个 XML 文档 (Books1.xml) 中。
合并具有相似结构的 XML 文档(第二个文档包含其他元素)
- 打开 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>
- 保存 Books2.xml。
- 再次运行 Visual C# .NET 项目。请注意,第二个文档的节点已附加到第一个 XML 文档中。
合并具有相似结构的 XML 文档(第二个文档包含属性)
- 打开 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>
- 保存 Books2.xml。
- 再次运行 Visual C# .NET 项目。请注意,第二个文档中的节点已附加到第一个 XML 文档中,结构与第一个 XML 文档相同。
合并具有相似结构的 XML 文档(第一个文档包含属性)
- 按照以下方式修改 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();
- 再次运行 Visual C# .NET 项目。请注意,生成的 XML 文档将 Books1.xml 中的节点附加到了 Books2.xml 中。另外您会注意到,所有的 Book 节点都包含"genre"属性。
因此,根据第一个 XML 文档的结构,需要对第二个 XML 文档加以修改以便使生成的 XML 更有意义。