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文章:

AJAX:XHR的入门

AJAX 实例:ASP.NET 服务端的XML处理

Ajax:用异步回调对ASP.NET 开发重构实例