AJAX实例:ASP.NET 中的XML格式处理
在AJAX的响应数据处理中XML格式是将XML文档作为数据内容返回给客户端来进行处理。问题是服务端程序是如何将数据生成XML格式文档文件的,XML文档是如何操作里面的内容呢?
程序生成XML文档
这种方式是用 C# 程序生成一个 XML 文件,并将数据放在其中来处理。下面是几种不同的方法实现了同样的目的。
用XmlWriter类编辑数据而实现的简单示例:
XmlTextWriter xtw = new XmlTextWriter(filePath, Encoding.UTF8); xtw.Formatting = Formatting.Indented; xtw.WriteStartDocument(true); xtw.WriteStartElement("root"); xtw.WriteElementString("username", Nodevalue); xtw.WriteEndElement(); xtw.WriteEndDocument(); xtw.Flush(); xtw.Close();
在示例代码中,Nodevalue 为所取得的数据值,代码略。filePath 为XML文件路径值,代码略。
运行结果是生成了一个内容与之前的那篇贴文一样的 XML 文档。
用XmlDocument类实现的示例:
XmlDocument xmldoc; XmlDeclaration xmldecl; XmlNode xmlnode; XmlElement xmlelem; xmldoc = new XmlDocument(); xmldecl = xmldoc.CreateXmlDeclaration("1.0", "gb2312", null); xmldoc.AppendChild(xmldecl); xmlelem = xmldoc.CreateElement("", "root", ""); xmldoc.AppendChild(xmlelem); xmlnode = xmldoc.CreateElement("username"); xmlnode.InnerText = Nodevalue; xmlelem.AppendChild(xmlnode); xmldoc.Save(filePath);
注意:因为XmlDocument类实现的话,与XmlWriter类实现相比,在性能上较低效些。所以推荐用XmlWriter类来实现。
用XML序列化的技术来实现:
Root root = new Root(); root.Username = Nodevalue; XmlSerializer srl = new XmlSerializer(typeof(Root)); StreamWriter wrt = new StreamWriter(filePath); srl.Serialize(wrt, root); wrt.Close();
下面是Root类的完整内容:
using System; public class Root { private string _username; public string Username { get { return _username; } set { _username = value; } } }
对已有的XML文档进行操作
如果是对已有的XML文档文件进行操作处理,而不是用程序来生成一个新的XML文档文件呢?下面的示例是C#编程代码部分片断:
XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(filePath); XmlNodeList xmlnodelist = xmldoc.SelectSingleNode("Root").ChildNodes; foreach (XmlNode xmlnode in xmlnodelist) { while (xmlnode.Name == "Username") { xmlnode.InnerText = Nodevalue; break; } } xmldoc.Save(filePath);
代码是对已有XML文件进行操作处理的,那么,可以看看下面是类的构造方法中的程序示例:
if (File.Exists(filePath)) { XmlOperateHandle(); } else { XmlWriterHandle(); }
为了改进程序的性能,那我们用XPathNavigator对象处理来修改重写:
XmlDocument xmldoc = new XmlDocument(); try { xmldoc.Load(filePath); } catch { } XPathNavigator navigator = xmldoc.CreateNavigator(); navigator.MoveToRoot(); if(navigator.HasChildren) { navigator.MoveToFirstChild(); if (navigator.Name == "username") { navigator.InnerXml = Nodevalue; } }
Ajax系列blog文章: