XML类及XmlSerializer 的使用

前端之家收集整理的这篇文章主要介绍了XML类及XmlSerializer 的使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

序列化成xml则相较序列化成二进制受到很多限制,主要有三个.
@H_404_8@


@H_404_8@

1是只能序列化public的字段或属性.@H_404_8@


@H_404_8@

2是有些类型是不能序列化.比如上面的HastableTimeSpan这样的类型.@H_404_8@


@H_404_8@

3是类中必须有无参的构造函数才能被序列化成xml.@H_404_8@


@H_404_8@

下面是User.xml文件的格式,放在网站跟目录中,本例只为实现操作xml功能,所以登录密码没有加密,在实际应用中,你应该考虑这个问题。同时,这个文件应该赋予写入的权限,这点比较容易疏漏。@H_404_8@

<?xml version="1.0"?>@H_404_8@

<UserLogin>@H_404_8@

<User>@H_404_8@

<UserCode>001</UserCode>@H_404_8@

<UserName>操作员1</UserName>@H_404_8@

<UserPwd>111</UserPwd>@H_404_8@

</User>@H_404_8@

<User>@H_404_8@

<UserCode>002</UserCode>@H_404_8@

<UserName>操作员2</UserName>@H_404_8@

<UserPwd>222</UserPwd>@H_404_8@

</User>@H_404_8@

</UserLogin>@H_404_8@


@H_404_8@

下面我们开始编码,首先vs2005中创建asp.net 网站,选择c#语言@H_404_8@


@H_404_8@

新建一个web窗体,放上三个textBox,三个button,暂时不用改名字,为了方便大家(以及我懒)这个例子中没有改控件的名字(脸红)。@H_404_8@


@H_404_8@

接着新建项目--类,取名为XmlRW.cs,存放到app_Code文件夹中@H_404_8@


@H_404_8@

在最上部加上xmlusing : using System.Xml 如下面的代码@H_404_8@

using System;@H_404_8@

using System.Data;@H_404_8@

using System.Configuration;@H_404_8@

using System.Web;@H_404_8@

using System.Web.Security;@H_404_8@

using System.Web.UI;@H_404_8@

using System.Web.UI.WebControls;@H_404_8@

using System.Web.UI.WebControls.WebParts;@H_404_8@

using System.Web.UI.HtmlControls;@H_404_8@

using System.Xml;@H_404_8@


@H_404_8@

/// <summary>@H_404_8@

/// Xml文件的读写类@H_404_8@

/// </summary>@H_404_8@

/// @H_404_8@

public class XmlRW@H_404_8@

{@H_404_8@

public XmlRW()@H_404_8@

{@H_404_8@

//@H_404_8@

// TODO: 在此处添加构造函数逻辑@H_404_8@

//@H_404_8@

}@H_404_8@


@H_404_8@

//// 大家注意我们下面的内容在这里写@H_404_8@


@H_404_8@

}@H_404_8@


@H_404_8@

然后,我们开始写三个方法,来完成对xml文件记录的增加修改删除,也就是对UserCode,UserName,NamePwd的操作。代码如下:@H_404_8@

using System;@H_404_8@

using System.Data;@H_404_8@

using System.Configuration;@H_404_8@

using System.Web;@H_404_8@

using System.Web.Security;@H_404_8@

using System.Web.UI;@H_404_8@

using System.Web.UI.WebControls;@H_404_8@

using System.Web.UI.WebControls.WebParts;@H_404_8@

using System.Web.UI.HtmlControls;@H_404_8@

using System.Xml;@H_404_8@


@H_404_8@

/// <summary>@H_404_8@

/// Xml文件的读写类@H_404_8@

/// </summary>@H_404_8@

/// @H_404_8@

public class XmlRW@H_404_8@

{@H_404_8@

public XmlRW()@H_404_8@

{@H_404_8@

//@H_404_8@

// TODO: 在此处添加构造函数逻辑@H_404_8@

//@H_404_8@

}@H_404_8@


@H_404_8@

//WriteXml 完成对User添加操作@H_404_8@

//FileName 当前xml文件的存放位置@H_404_8@

//UserCode 添加用户的编码@H_404_8@

//UserName 添加用户的姓名@H_404_8@

//UserPassword 添加用户的密码@H_404_8@


@H_404_8@

public void WriteXML(string FileName,string UserCode,stringUserName,string UserPassword)@H_404_8@

{@H_404_8@


@H_404_8@

//初始化XML文档操作@H_404_8@

XmlDocument myDoc = new XmlDocument();@H_404_8@

//加载XML文件@H_404_8@

myDoc.Load(FileName);@H_404_8@


@H_404_8@

//添加元素--UserCode@H_404_8@

XmlElement ele = myDoc.CreateElement("UserCode");@H_404_8@

XmlText text = myDoc.CreateTextNode(UserCode);@H_404_8@


@H_404_8@

//添加元素--UserName@H_404_8@

XmlElement ele1 = myDoc.CreateElement("UserName");@H_404_8@

XmlText text1 = myDoc.CreateTextNode(UserName);@H_404_8@


@H_404_8@

//添加元素--UserPwd@H_404_8@

XmlElement ele2 = myDoc.CreateElement("UserPwd");@H_404_8@

XmlText text2 = myDoc.CreateTextNode(UserPassword);@H_404_8@


@H_404_8@

//添加节点 User要对应我们xml文件中的节点名字@H_404_8@

XmlNode newElem = myDoc.CreateNode("element","User","");@H_404_8@


@H_404_8@

//在节点中添加元素@H_404_8@

newElem.AppendChild(ele);@H_404_8@

newElem.LastChild.AppendChild(text);@H_404_8@

newElem.AppendChild(ele1);@H_404_8@

newElem.LastChild.AppendChild(text1);@H_404_8@

newElem.AppendChild(ele2);@H_404_8@

newElem.LastChild.AppendChild(text2);@H_404_8@


@H_404_8@

//将节点添加到文档中@H_404_8@

XmlElement root = myDoc.DocumentElement;@H_404_8@

root.AppendChild(newElem);@H_404_8@


@H_404_8@

//保存@H_404_8@

myDoc.Save(FileName);@H_404_8@


@H_404_8@

}@H_404_8@


@H_404_8@

//DeleteNode 完成对User添加操作@H_404_8@

//FileName 当前xml文件的存放位置@H_404_8@

//UserCode 添加用户的编码@H_404_8@


@H_404_8@

public void DeleteNode(string FileName,string UserCode)@H_404_8@

{@H_404_8@

//初始化XML文档操作@H_404_8@

XmlDocument myDoc = new XmlDocument();@H_404_8@

//加载XML文件@H_404_8@

myDoc.Load(FileName);@H_404_8@


@H_404_8@

//搜索指定某列,一般是主键列@H_404_8@

XmlNodeList myNode = myDoc.SelectNodes("//UserCode");@H_404_8@


@H_404_8@

//判断是否有这个节点@H_404_8@


@H_404_8@

if (!(myNode == null))@H_404_8@

{ @H_404_8@

//遍历节点,找到符合条件的元素@H_404_8@


@H_404_8@

foreach (XmlNode xn in myNode)@H_404_8@

{@H_404_8@

if (xn.InnerXml == UserCode)@H_404_8@

//删除元素的父节点@H_404_8@

xn.ParentNode.ParentNode.RemoveChild(xn.ParentNode);@H_404_8@

}@H_404_8@

}@H_404_8@


@H_404_8@

//保存@H_404_8@

myDoc.Save(FileName);@H_404_8@


@H_404_8@

}@H_404_8@


@H_404_8@

//WriteXml 完成对User修改密码操作@H_404_8@

//FileName 当前xml文件的存放位置@H_404_8@

//UserCode 欲操作用户的编码@H_404_8@

//UserPassword 修改用户的密码@H_404_8@


@H_404_8@

public void UpdateXML(string FileName,stringUserPassword)@H_404_8@

{@H_404_8@


@H_404_8@

//初始化XML文档操作@H_404_8@

XmlDocument myDoc = new XmlDocument();@H_404_8@

//加载XML文件@H_404_8@

myDoc.Load(FileName);@H_404_8@


@H_404_8@

//搜索指定的节点@H_404_8@

System.Xml.XmlNodeList nodes = myDoc.SelectNodes("//User");@H_404_8@


@H_404_8@

if (nodes != null)@H_404_8@

{@H_404_8@

foreach (System.Xml.XmlNode xn in nodes)@H_404_8@

{@H_404_8@

if(xn.SelectSingleNode("UserCode").InnerText == UserCode)@H_404_8@

{@H_404_8@

xn.SelectSingleNode("UserPwd").InnerText = UserPassword;@H_404_8@

}@H_404_8@


@H_404_8@

}@H_404_8@

}@H_404_8@


@H_404_8@

myDoc.Save(FileName);@H_404_8@


@H_404_8@

}@H_404_8@


@H_404_8@

}@H_404_8@


@H_404_8@

Ok@H_404_8@


@H_404_8@


@H_404_8@

C# XmlSerializer实现序列化浅析@H_404_8@


@H_404_8@

C# XmlSerializer类是实现序列化的一个类,那么关于C# XmlSerializer的学习我们要掌握怎么样的操作方法呢?那么这里向你详细介绍具体的操作细节情况。@H_404_8@


@H_404_8@

C# XmlSerializer是什么呢?它是使用二进制格式化程序进行序列化的一个类,那么具体的通过C# XmlSerializer如何实现序列化操作呢?在序列化操作的过程中需要注意些什么呢?@H_404_8@


@H_404_8@

C# XmlSerializer的出处:@H_404_8@


@H_404_8@

using System.Xml.Serialization; @H_404_8@


@H_404_8@

C# XmlSerializer实现序列化:@H_404_8@


@H_404_8@

XmlSerializer xml = new XmlSerializer(typeof(Test)); @H_404_8@

FileStream fs = newFileStream(@"c:\t.xml",FileMode.Create); @H_404_8@

xml.Serialize(fs,t); @H_404_8@

fs.Close(); @H_404_8@


@H_404_8@

C# XmlSerializer实现反序列化:@H_404_8@


@H_404_8@

FileStream fs = new FileStream(@"c:\t.xml",FileMode.Open); @H_404_8@

XmlSerializer xml = new XmlSerializer(typeof(Test)); @H_404_8@

Test t = (Test)xml.Deserialize(fs); @H_404_8@


@H_404_8@

C# XmlSerializer类与主流的序列化类的几个不同点是:@H_404_8@


@H_404_8@

1、不需要Serializable属性SerializableNonSerializable属性将会被忽略,但是使用XmlIgnore属性,和NonSerializable属性类似。@H_404_8@


@H_404_8@

2、该类不能安全地访问私有变成员,所以学要将私有成员改为公共成员,或者提供合适的公共特性。@H_404_8@


@H_404_8@

3、要求被序列化的类要有一个默认的构造器。@H_404_8@


@H_404_8@

C# XmlSerializer的使用基本情况就向你介绍到这里,希望对你了解和学习C# XmlSerializer类有所帮助,并且对序列化的操作有所认识。@H_404_8@ 原文链接:https://www.f2er.com/xml/300137.html

猜你在找的XML相关文章