C#中的XML

介绍:

在这篇文章中你将看到怎样通过微软的.NET平台中C#语言处理XML文档。第一步我将简要讨论.NET  Framework Library 中有关XML的命名空间和类。然后我们将读取和写入XML文档,在这篇文章的末尾,我会告诉您如何利用ADO.NET和XML.NET模型从关系数据库中读取和写入XML文件,反之亦然。

介绍微软的.NeT的XML命名空间和类:

在我们让XML文档和.NET Framework一起工作之前,我们有必要了解一下.NET 类库提供的(有关XML的)命名空间。

.NET提供五个支持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;
     
            }
     
        }
     
    }

    本文同步发布我的译言

    此条目发表在 Excellence Article 分类目录,贴了 , 标签。将固定链接加入收藏夹。

    发表评论

    电子邮件地址不会被公开。 必填项已用 * 标注

    *

    您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">