C#操作XML方法集合

C#操作XML方法集合
C#操作XML方法集合

using System.Xml;

using System.IO;

///

/// XMLProc 的摘要说明

/// 将数据写入XML文件的方法

/// SaveXML_DataSet()利用DataSet写入XML文件

/// SaveXML_XmlTextWriter()利用XmlTextWriter写入XML文件

/// SaveXML_XmlNode()利用XmlNode写入XML文件

///

/// 从XML文件中读取数据

/// GetXML_XmlTextReader()

/// GetXML_XmlNodeReader()

///

public class XMLProc

{

public XMLProc()

{

//

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

//

}

///

/// 利用XmlTextWriter不容易实现追加,也就是说每次写入XML文档的数据都是覆盖式的,不容易实现在原有数据的基础上追加数据,

/// 而采用XmlNode模式就能方便地实现数据追加

/// 利用DataSet也不是追加数据

///

//利用DataSet把数据写入XML文件,不实现追加

public static string SaveXML_DataSet(BaseInfo.Phonebook pb)

{

try

{

DataTable dt = new DataTable();

dt.Columns.Add("name", Type.GetType("System.String"));

dt.Columns.Add("telphone", Type.GetType("System.String"));

……

DataRow dr = dt.NewRow();

dr[0] = https://www.360docs.net/doc/2c7171149.html,;

dr[1] = pb.telphone;

……

dt.Rows.Add(dr);

System.Data.DataSet ds = new DataSet();

ds.Tables.Add(dt);

//将DataSet里面的数据写入XML

ds.WriteXml(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

return "true";

}

catch(Exception ex)

{

return ex.ToString();

}

}

//利用xmlTextWriter往XML文件写入数据,没有实现追加

public static string SaveXMLData_XmlTextWriter(BaseInfo.Phonebook pb)

{

try

{

//创建一个XmlTextWriter类的实例对象

System.IO.FileInfo file = new FileInfo(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

//if (!file.Exists)

XmlTextWriter textWriter = new XmlTextWriter(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"), System.Text.Encoding.UTF8);

//开始写过程,调用WriterStartDocument方法写入文件头信息

//例如

textWriter.WriteStartDocument();

//写入根节点

textWriter.WriteStartElement("phonebook");

textWriter.WriteStartElement("member");

//写入节点name

textWriter.WriteStartElement("name", "");

//为name节点写入用户输入的值

textWriter.WriteString(https://www.360docs.net/doc/2c7171149.html,);

//写入name节点的结束符

textWriter.WriteEndElement();

textWriter.WriteStartElement("telphone", "");

textWriter.WriteString(pb.telphone);

textWriter.WriteEndElement();

……

//写入文档结束,调用WriteEndDocument方法

textWriter.WriteEndDocument();

//关闭textWriter

textWriter.Close();

return "true";

}

catch (Exception ex)

{

return ex.ToString();

}

}

//利用XmlNode往XML文件写入数据,可以实现追加

public static string SaveXMLData_XmlNode(BaseInfo.Phonebook pb)

{

try

{

//创建一个XmlDocument 对象,用于载入存储信息的XML文件

System.Xml.XmlDocument xdoc = new XmlDocument();

xdoc.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

//创建一个menber节点并将它添加到根节点下

XmlElement parentNode = xdoc.CreateElement("member");

xdoc.DocumentElement.PrependChild(parentNode);

//创建所有用于存储信息的节点

XmlElement nameNode = xdoc.CreateElement("name");

XmlElement telphoneNode = xdoc.CreateElement("telphone");

……

///获取文本信息

XmlText nameText = xdoc.CreateTextNode(https://www.360docs.net/doc/2c7171149.html,);

XmlText telphoneText = xdoc.CreateTextNode(pb.telphone);

……

///将上面的各个存储信息节点添加到menber节点下,但并不包含最终的值

parentNode.AppendChild(nameNode);

parentNode.AppendChild(telphoneNode);

……

///将上面获取的文本信息添加到与之相对应的节点中

nameNode.AppendChild(nameText);

telphoneNode.AppendChild(telphoneText);

……

///保存存储信息的XML文件

xdoc.Save(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

return "true";

}

catch (Exception ex)

{

return ex.ToString();

}

}

//XmlTextReader类实现的查找程序

public static string GetXML_XmlTextReader(string keyName)

{

//XMLTextReader读取XML文件

XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

if (keyName == "")

{

string outMsg = "";

string currentNodeName = "";

int i = 1;

//利用xmltextreader对象的Read()方法循环读取文件的节点

while (xmltextreader.Read())

{

//当节点类型是元素的时候,记录该节点名称

if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)

{

currentNodeName = xmltextreader.LocalName.ToString();

}

if (xmltextreader.NodeType == System.Xml.XmlNodeType.Text)

{

//把这个人的属性组织成文本串,便天页面输出

outMsg += "" + currentNodeName + "" + xmltextreader.Value + "";

}

if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))

{

outMsg += "联系人:(" + (i++) + ")";

}

}

outMsg = "

" + outMsg + "
";

//关闭xmltextreader

xmltextreader.Close();

//显示联系人的详细信息

//Response.Write(outMsg);

return outMsg;

}

else

{

//XmlTextReader xmltextreader = new XmlTextReader(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

bool findflag = false;

string outMsg = "

";

string currentNodeName = "";

//利用xmltextreader对象的Read()方法自我表现读取文件的节点

while (xmltextreader.Read())

{

//当找到了要查找的人,并且当前节点为元素,并且节点名称为"member"时退出循环

if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))

{

break;

}

//当节点类型是元素的时候,记录该节点名称

if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)

{

currentNodeName = xmltextreader.LocalName.ToString();

}

//还没有查找到指定的人,并且当前节点类型为文本,并且当前节点的节点值与要查找的人符合时

if ((findflag == false) && (xmltextreader.NodeType == System.Xml.XmlNodeType.Text) && (xmltextreader.Value == keyName))//当为文本类型同时对应的值为要查找的人的时候

{

findflag = true;//设置找到了要查找的人的标志

}

//如果已经找到,并且当前节点类型为文本时,循环记录这个人的所有信息

if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Text)

{

outMsg += "

";

}

//如果已经找到了这个人,同时Xtr当前为文本类型,那么

}

//关闭xmltextreader

xmltextreader.Close();

outMsg += "

已经查找到下列联系人:
" + currentNodeName + ":" + xmltextreader.Value + "
";

//显示查找的人的详细信息

//Response.Write(outMsg);

return outMsg;

}

}

//利用XmlNodeReader实现查找的程序

public static string GetXML_XmlNodeReader(string keyName)

{

XmlDocument xml = new XmlDocument();

bool findNode = false;

try

{

xml.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));

}

catch

{ }

XmlNodeReader read = new XmlNodeReader(xml);

while (read.Read())

{

if (read.NodeType == System.Xml.XmlNodeType.Element && read.LocalName.ToString().Equals(keyName))

{

read.Read();

if (read.NodeType == System.Xml.XmlNodeType.Text)

{

//Response.Write(read.Value);

return read.Value;

//break;

}

}

}

return "";

}

}

本文来自CSDN博客

相关主题
相关文档
最新文档