311530 HOW TO:在 Visual C# .NET 中使用 System.Xml 合併兩個 XML 文檔中的數據 (From MKBA)
本文引用下面的 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 更有意義。