311530 HOW TO:在 Visual C# .NET 中使用 System.Xml 合併兩個 XML 文檔中的數據 (From MKBA)

311530 HOW TO:在 Visual C# .NET 中使用 System.Xml 合併兩個 XML 文檔中的數據 (From MKBA)

本文的發佈號曾爲 CHS311530

概要

本分步指導文章說明了如何使用 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 更有意義。
返回頁首

參考

有關其他信息,請單擊下面的文章編號以查看 Microsoft 知識庫中的文章:

286817 HOWTO: Merge Data in Two XML Documents by Programming the Document Object Model (DOM)(HOWTO:通過對文檔對象模型 (DOM) 進行編程來合併兩個 XML 文檔中的數據)

返回頁首
發佈了32 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章