学习.NET (5) XML起步 -研究System.Xml命名空间对XML文件操作的支持

XML起步

-研究System.Xml命名空间对XML文件操作的支持

By Alva Chien

File Version: 1.0

Released: 2007.8.30

FCL提供了System.Xml这个命名空间来支持对XML文件的操作,一开始接触这个namespace会发现很多Class,可能会无所适从,不知从何开始。事实上,对于简单的XML读写操作,可以使用以下两种方法:

1.       使用XmlTextReaderXmlTextWriter

通常这种方法主要用于操作很简单的XML文件,一般这些XML文件不是很强调数据内容的格式。比如,笔者认为简单的替换传统的ini文件的XML文件就可以认为是简单的。当然,简单与否是相对的概念。

一个完整的读取文件的例子如下:

XmlTextReader reader = null;

 

try

{

  // Load the reader with the data file and ignore all white space nodes.        

  reader = new XmlTextReader(Test.xml);

  reader.WhitespaceHandling = WhitespaceHandling.None;

 

  while (reader.Read())

  {

    switch (reader.NodeType)

    {

      case XmlNodeType.Element:

        break;

 

      case XmlNodeType.Attribute:

        break;

 

      case XmlNodeType.Text:

        //Console.Write(reader.Value);

        break;

 

      case XmlNodeType.CDATA:

        //Console.Write("<![CDATA[{0}]]>", reader.Value);

        break;

 

      case XmlNodeType.ProcessingInstruction:

        //Console.Write("<?{0} {1}?>", reader.Name, reader.Value);

        break;

 

      case XmlNodeType.Comment:

        //Console.Write("<!--{0}-->", reader.Value);

        break;

 

      case XmlNodeType.XmlDeclaration:

        //Console.Write("<?xml version='1.0'?>");

        break;

 

      case XmlNodeType.Document:

      case XmlNodeType.DocumentType:

        //Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);

        break;

 

      case XmlNodeType.EntityReference:

        //Console.Write(reader.Name);

        break;

 

      case XmlNodeType.EndElement:

        //Console.Write("</{0}>", reader.Name);

        break;

 

      default:

        break;

      }

    }

  }

  finally

  {

    if (reader != null)

      reader.Close();

   }

 

一个完整的写入文件的例子如下:

XmlTextWriter writer = new XmlTextWriter(Test.xml, Encoding.Unicode);

writer.Formatting = Formatting.Indented;

writer.WriteStartDocument();

writer.WriteComment("This is test file");

writer.WriteStartElement(Root);

writer.WriteElementString(TEST, TEST1);

writer.WriteEndElement();

writer.WriteEndDocument();

writer.Close();

 

2.       使用XmlDocumentXmlReader/XmlWriter类,以及很多的辅助类

理论来说,FCL提供了两种model来解析Xml文件,其中一种称为DOM Document Object Model),FCL使用了XmlDocument以及周围的辅助类来实现了这种方式, 另外一种称为XPath data modelFCL通过XPathDocument以及辅助类实现了这种方式。本文中只涉及第一种方式:

一个完整的写入文件的例子:

XmlDocument doc = new XmlDocument();

 

// Create the root

doc.LoadXml("<Root />");

 

// Create declarion first

XmlDeclaration xmldecl;

xmldecl = doc.CreateXmlDeclaration("1.0", "utf-16", null);

doc.InsertBefore(xmldecl, doc.DocumentElement);

//Create a comment.

XmlComment newComment = doc.CreateComment("Sample XML document");

doc.InsertBefore(newComment, doc.DocumentElement);

//Create a new node.

XmlElement elem = doc.CreateElement("DataFolder");

elem.InnerText = "workFolder";

 

//Add the node to the document.

doc.DocumentElement.AppendChild(elem);

 

// Create a document fragment.

//XmlDocumentFragment docFrag = doc.CreateDocumentFragment();

//Set the contents of the document fragment.

//docFrag.InnerXml = "<item>widget</item>";

//doc.DocumentElement.AppendChild(docFrag);

 

// Create a new node and add it to the document.

//XmlNode elem = doc.CreateNode(XmlNodeType.Element, "price", null);

//elem.InnerText = "19.95";

//doc.DocumentElement.AppendChild(elem);

 

doc.Save(Console.Out);

         一个完整的读取文件的例子:

XmlDocument doc = new XmlDocument();

 

//Load the the document with the last book node.

XmlTextReader reader = new XmlTextReader(Test.xml);

reader.WhitespaceHandling = WhitespaceHandling.None;

reader.MoveToContent();

reader.Read();

doc.Load(reader);

  这个例子中,doc已经拥有了以XMLNode为节点的树,如何遍历这个树?那是《数据结构》中的命题了,当然无外乎深度优先和广度优先了….

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值