译者:

木溪的其他译作

原文:

XML with C-sharp

- C#中的XML

本周热评

其它收藏服务:

金牌译作 C#中的XML

2538个读者 木溪 @ yeeyan.com 2008年05月25日 双语对照  原文 字体大小

简介

通过本文你将学到用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;

        }

    }

}

本文同步发布在译者的Blog:Open ABC

本文版权所有,未经许可,请勿转载
内容合作请 联系我们

译作评分
6.0
请给出您的评分  提交

更多关于 xml C# 的翻译文章

1条评论

  • 1.

    B5 大学士  | Blog  | 2008年05月25日

    恩恩,发给一个学编程的哥们儿……

     

添加评论

阅读
发现
翻译
合作媒体

Copyright © 2009 yeeyan.com All rights reserved. 京ICP证080457号