1. Books.xml内容

books.xml
<?xml version="1.0" encoding="utf-8" ?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>
An in-depth look at creating applications
with XML.
</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>
A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.
</description>
</book>
</catalog>

 

2. 使用XmlTextReader读取xml文件

XmlTextReader是一个阅读器指针,它总是向前移动,读出一块数据到内存缓冲器。比起XmlDocument类加载整个文档到内存有更好的性能。

    void ReadByXmlTextReader()
    {
        XmlTextReader reader = new XmlTextReader("Books.xml");
        reader.WhitespaceHandling = WhitespaceHandling.None;

        while (reader.Read()) {
            if (reader.Name == "book") {
                Console.WriteLine(reader.GetAttribute("id") + ": ");

                reader.Read();
                string author = reader.ReadElementContentAsString();
                string title = reader.ReadElementContentAsString();
                string genre = reader.ReadElementContentAsString();
                string price = reader.ReadElementContentAsString();
                string publishDate = reader.ReadElementContentAsString();
                string description = reader.ReadElementContentAsString();

                Console.WriteLine("{0} book {1} written by {2}, published on {3}", genre, title, author, publishDate);
                Console.WriteLine(description);
            }
        }

        reader.Close();
    }

3.使用XmlDocument和XmlNodeReader读取文件

XmlNodeReader类似于XmlTextReader,但是接受一个XmlNode实例作为读出目标。

    void ReadByXmlDocument()
    {
        var doc = new XmlDocument();
        doc.Load("Books.xml");

        var nodes = doc.GetElementsByTagName("book");
        foreach (XmlNode node in nodes) {
            Console.WriteLine(node.Attributes["id"].Value + ":");

            var reader = new XmlNodeReader(node);
            reader.Read();
            reader.Read();

            string author = reader.ReadElementContentAsString();
            string title = reader.ReadElementContentAsString();
            string genre = reader.ReadElementContentAsString();
            string price = reader.ReadElementContentAsString();
            string publishDate = reader.ReadElementContentAsString();
            string description = reader.ReadElementContentAsString();

            Console.WriteLine("{0} book {1} written by {2}, published on {3}", genre, title, author, publishDate);
            Console.WriteLine(description);
        }

    }

4.修改Xml文件 

XmlLDocument没有Close或者Dispose方法,因为它是XML文档的内存表现。一旦读出,文件不再被需要。

    void ChangeXmlDocument()
    {
        var xmlDocument = new XmlDocument();
        xmlDocument.Load("Books.xml");

        XmlNode nodeToModify = xmlDocument.DocumentElement.SelectSingleNode("book/genre");
        nodeToModify.InnerText = "XML Tech";

        XmlElement newElement = xmlDocument.CreateElement("book");

        XmlAttribute newAttribute = xmlDocument.CreateAttribute("id");
        newAttribute.Value = "bk103";
        newElement.Attributes.Append(newAttribute);

        XmlElement authorElement = xmlDocument.CreateElement("author");
        authorElement.InnerText = "Mark Russinovich,David Solomon,Alex Ionecsu";
        newElement.AppendChild(authorElement);

        XmlElement titleElement = xmlDocument.CreateElement("title");
        titleElement.InnerText = "Windows Internals, 5th edition";
        newElement.AppendChild(titleElement);

        XmlElement genreElement = xmlDocument.CreateElement("genre");
        genreElement.InnerText = "Windows Server 2008";
        newElement.AppendChild(genreElement);

        XmlElement priceElement = xmlDocument.CreateElement("price");
        priceElement.InnerText = "69.99";
        newElement.AppendChild(priceElement);

        XmlElement publishDateElement = xmlDocument.CreateElement("publish_date");
        publishDateElement.InnerText = "2009-6-17";
        newElement.AppendChild(publishDateElement);

        XmlElement descriptionElement = xmlDocument.CreateElement("description");
        descriptionElement.InnerText = "Windows Internals...";
        newElement.AppendChild(descriptionElement);

        xmlDocument.DocumentElement.AppendChild(newElement);

        xmlDocument.Save("Books.xml");

    }