查看文章 |
简介
通过本文你将学到用C#怎样操作XML System.Xml System.Xml.Schema System.Xml.Serialization System.Xml.XPath System.Xml.Xsl
System.Xml 命名空间包含了主要的XML类,这个命名空间包含很多读写XML文档的类,它们是以下这些类:
XmlReader XmlTextReader XmlValidatingReader XmlNodeReader XmlWriter XmlTextWriter (以上)你可以看到有4个读取的2个写入的类。在这篇文章中,我们将集中在读取和写入的类上,这些类常常被用在读取和写入XML文档中。
XmlReader 类是个抽象的基类,包含了很多读取文档的方法和属性。Read方法在流中读取一个节点,除读取功能以外,这个类也包含了浏览文档节点的方法。其中一些方法如下:
MoveToAttribute MoveToFirstAttribute MoveToContent MoveToFirstContent MoveToElement MoveToNextAttribute
还有其他更多有关读取的方法如:ReadString、 ReadInnerXml、 ReadOuterXml,和 ReadStartElement 。这些类中也有方法可以一步一步从当前节点移动到下一个节点。我们将在后面的例子中看到这些方法。
XmlTextReader、 XmlNodeReader 和XmlValidatingReader 类都是从 XmlReader 中派生出来的。从他们的名字上就可以看出,它们是用来读取文本、节点和架构的。
XmlWrite类包含的功能是将数据写入文档,这个类提供了很多写入方法用来写入XML文档项目。这个类是XmlTextWriter类的基类,我们将在实例中使用它。
读取XML文档
在我们的示例程序中,我们将通过 XmlTextReader类读取和显示books.xml 中的数据。这个文件在VS.NET 示例中附带了(安装好VS.NET 就有了,微软提供的示例)。你可以在你的电脑上搜索它并像下面一样改变文件路径:
XmlTextReader textReader = new XmlTextReader("C:\\books.xml"); 或者你使用其他任何的XML文档。 XmlTextReader, XmlNodeReader 和 XmlValidatingReader 类是从XmlReader类中派生的,除了XmlReader的属性和方法之外,这些类还分别包含了读取文本、节点和框架的成员。我使用XmlTextReader类读取XML文件。通过文件名作为参数的构造你可以读取文件。 XmlTextReader textReader = new XmlTextReader("C:\\books.xml");
创建了一个 XmlTextReader实例以后,你就可以调用Read方法开始读取文档了。在读取方法被调用后,你可以读取所有存在文档中的信息和数据。XmlReader类拥有的属性有Name, BaseURI, Depth, LineNumber 等等
示例:
using System; using System.Collections.Generic; using System.Text; using System.Collections; using System.IO; using System.Xml; using System.Xml.Serialization;
namespace XMLSerialzation { class Program { static void Main(string[] args) { ShoppingList myList = new ShoppingList(); myList.AddItem(new Item("eggs",1.49)); myList.AddItem(new Item("ground beef", 3.69)); myList.AddItem(new Item("bread",0.89)); Console.WriteLine("in main after adding "); // Serialization XmlSerializer s = new XmlSerializer(typeof(ShoppingList)); Console.WriteLine("xml serializer object created "); TextWriter w = new StreamWriter(@"c:\list.xml"); Console.WriteLine("text writer serializer object created "); s.Serialize(w, myList); Console.WriteLine("serialize called "); w.Close();
// Deserialization ShoppingList newList; TextReader r = new StreamReader(@"c:\list.xml"); newList = (ShoppingList)s.Deserialize(r); r.Close(); Console.ReadLine(); } }
[XmlRoot("shoppingList")] public class ShoppingList { private ArrayList listShopping;
public ShoppingList() { listShopping = new ArrayList(); }
[XmlElement("itemone")] public Item[] Items { get { Item[] items = new Item[listShopping.Count]; listShopping.CopyTo(items); Console.WriteLine("called get of item []"); return items; } set { if (value == null) return; Item[] items = (Item[])value; listShopping.Clear(); foreach (Item item in items) listShopping.Add(item); } }
public int AddItem(Item item) { Console.WriteLine("in AddItem with item object "); Console.WriteLine("return "+listShopping.Add(item)); return listShopping.Add(item); } }
// Items in the shopping list public class Item { [XmlAttribute("name")] public string name; [XmlAttribute("price")] public double price;
public Item() { }
public Item(string Name, double Price) { Console.WriteLine("in item constructor with two argument"); name = Name; price = Price; } } } 介绍: 在这篇文章中你将看到怎样通过微软的.NET平台中C#语言处理XML文档。第一步我将简要讨论.NET Framework Library 中有关XML的命名空间和类。然后我们将读取和写入XML文档,在这篇文章的末尾,我会告诉您如何利用ADO.NET和XML.NET模型从关系数据库中读取和写入XML文件,反之亦然。 介绍微软的.NeT的XML命名空间和类: 在我们让XML文档和.NET Framework一起工作之前,我们有必要了解一下.NET 类库提供的(有关XML的)命名空间。 .NET提供五个支持XML类的命名空间,它们是: |