您的位置: 网站首页 > 程序开发 > C#程序设计 > 第11章 XML编程 > 【11.3 写入XML文档】

11.3 写入XML文档

 

XML文档的写入可以通过类XmlWriter实现。XmlWriter类是一个抽象基类,利用只进、只写、非缓存的方式来生成XML流。可以用于构建符合W3C可扩展标记语言(XML1.0建议和XML中的命名空间建议的XML文档。

11.3.1  使用XMLWriter

XmlWriter实例使用静态System.Xml.XmlWriter.Create方法创建。XmlWriter实例使用Create方法创建。XmlWriterSettings类用于指定要在新的XmlWriter对象上启用的功能集。使用XmlWriterSettings类的属性启用或禁用功能。通过将XmlWriterSettings对象传递给Create方法,指定要支持的写入器功能。

下面介绍一个实例,使用XmlWriter类创建一个简单的XML文档。

1.目的说明

创建一个Windows控制台应用程序,演示创建XML文档的方法。

2.实现步骤

1)创建一个名为XmlWrite的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace XmlWrite

{

    class Program

    {

        static void Main(string[] args)

        {

            //XML文件路径

            string path = @"c:\new.xml";

 

            //尝试读取该XML文件

            try

            {

                //创建设置

                XmlWriterSettings mySettings = new XmlWriterSettings();

                mySettings.Indent = true;

                mySettings.IndentChars = ("    ");

 

                //创建XmlWriter的实例

                XmlWriter myWriter = XmlWriter.Create(path, mySettings);

 

                // 输入XML数据

                myWriter.WriteStartElement("people");

                myWriter.WriteElementString("name", "zhang");

                myWriter.WriteEndElement();

                myWriter.Flush();

 

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

11-7  运行结果1

 

            }

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图11-7示。

4.代码分析

可以看到,成功地创建了XML文档。查看位于C盘根目录的new.xml文件,如图11-8所示。

11-8  运行结果2

11.3.2  写入属性

WriteAttributeStringWriteStartAttributeWriteAttributes方法专门为创建属性而设计。使用这些方法可以为元素或XML声明节点编写属性。编写属性的方法也可以用于为元素创建命名空间声明。WriteAttributeString方法是编写属性最简单的方式,该方法用于编写整个属性节点,包括字符串值。下面介绍一个实例,演示如何向XML文档中写入属性。

1.目的说明

创建一个Windows控制台应用程序,演示创建XML文档的方法。

2.实现步骤

1)创建一个名为PropWrite的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace PropWrite

{

    class Program

    {

        static void Main(string[] args)

        {

            //XML文件路径

            string path = @"c:\new.xml";

 

            //尝试读取该XML文件

            try

            {

                //创建设置

                XmlWriterSettings mySettings = new XmlWriterSettings();

                mySettings.Indent = true;

                mySettings.IndentChars = ("    ");

 

                //创建XmlWriter的实例

                XmlWriter myWriter = XmlWriter.Create(path, mySettings);

 

                // 输入XML数据

                myWriter.WriteStartElement("people");

                myWriter.WriteAttributeString("age", "20");

                myWriter.WriteElementString("name", "zhang");

                myWriter.WriteEndElement();

                myWriter.Flush();

 

                Console.WriteLine("XML文档创建成功!");

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

11-9  运行结果1

 

            }

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图11-9所示。

4.代码分析

可以看到,成功地创建了XML文档。查看位于C盘根目录的new.xml文件,如图11-10所示。

11-10  运行结果2

WriteStartElement方法是WriteAttributeString方法更高级的版本,它可以使用多个方法调用编写属性值。例如,可以使用WriteValue编写类型化值。通过调用WriteEndAttribute方法来关闭该属性。利用如下实例演示了另外一种属性的写入方法。

1.目的说明

创建一个Windows控制台应用程序,演示写入XML文档属性的方法。

2.实现步骤

1)创建一个名为AdvPropWrite的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace AdvPropWrite

{

    class Program

    {

        static void Main(string[] args)

        {

            //XML文件路径

            string path = @"c:\new.xml";

 

            //尝试读取该XML文件

            try

            {

                //创建设置

                XmlWriterSettings mySettings = new XmlWriterSettings();

                mySettings.Indent = true;

                mySettings.IndentChars = ("    ");

 

                //创建XmlWriter的实例

                XmlWriter myWriter = XmlWriter.Create(path, mySettings);

                // 输入XML数据

                myWriter.WriteStartElement("people");

                myWriter.WriteStartAttribute("nation");

                myWriter.WriteValue("chinese");

                myWriter.WriteEndAttribute();

                myWriter.WriteElementString("name", "zhang");

                myWriter.WriteEndElement();

                myWriter.Flush();

 

                Console.WriteLine("属性写入成功!");

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图11-11所示。

4.代码分析

可以看到,成功地创建了XML文档。查看位于C盘根目录的new.xml文件,如图11-12所示。

       

11-11  运行结果1                           11-12  运行结果2

11.3.3  写入元素

WriteElementStringWriteStartElementWriteNode方法可以用于编写元素节点。WriteElementString用于编写整个元素节点,包括字符串值。下面介绍一个实例,演示写入XML文档元素的方法。

1.目的说明

创建一个Windows控制台应用程序,演示写入XML文档元素的方法。

2.实现步骤

1)创建一个名为NodeWrite的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace NodeWrite

{

    class Program

    {

        static void Main(string[] args)

        {

            //XML文件路径

            string path = @"c:\new.xml";

 

            //尝试读取该XML文件

            try

            {

                //创建设置

                XmlWriterSettings mySettings = new XmlWriterSettings();

                mySettings.Indent = true;

                mySettings.IndentChars = ("    ");

 

                //创建XmlWriter的实例

                XmlWriter myWriter = XmlWriter.Create(path, mySettings);

 

                // 输入XML数据

                myWriter.WriteStartElement("people");

                myWriter.WriteElementString("name", "zhang");

                myWriter.WriteElementString("nation", "china");

                myWriter.WriteEndElement();

                myWriter.Flush();

 

                Console.WriteLine("元素写入成功!");

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

        }

    }

}

11-13  运行结果1

 

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图11-13所示。

4.代码分析

可以看到,XML文档被成功地创建。查看位于C盘根目录的new.xml文件,如图11-14所示。

11-14  运行结果2

使用WriteNode方法可以复制在提供的XmlReaderXPathNavigator对象的当前位置发现的整个元素节点。调用时,会将源对象中的所有内容复制到XmlWriter实例。

下面介绍的实例演示了WriteNode的方法。

1.目的说明

创建一个Windows控制台应用程序,演示写入XML文档元素的方法。

2.实现步骤

1)创建一个名为AdvNodeWrite的控制台应用程序项目。

2)修改Program.cs文件的内容如下:

namespace AdvWriteNode

{

    class Program

    {

        static void Main(string[] args)

        {

            //XML文件路径

            string path = @"c:\new.xml";

            string oldPath = @"c:\test.xml";

 

            //尝试读取该XML文件

            try

            {

                //创建设置

                XmlWriterSettings mySettings = new XmlWriterSettings();

                mySettings.Indent = true;

                mySettings.IndentChars = ("    ");

 

                // 输入XML数据

                XmlReader myReader = XmlReader.Create(oldPath);

                myReader.ReadToDescendant("mail");

 

                //创建XmlWriter的实例

                XmlWriter myWriter = XmlWriter.Create(path);

                myWriter.WriteNode(myReader, true);

                myWriter.Flush();

 

                Console.WriteLine("元素写入成功!");

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

        }

    }

}

3.运行结果

Ctrl+F5组合键运行程序,运行结果如图11-15所示。

4.代码分析

可以看到,XML文档被成功地创建。查看位于C盘根目录的new.xml文件,如图11-16所示。

        

11-15  运行结果1                               11-16  运行结果2