C#操作XML代码整理

using System.Xml;
using System.IO;

/// <summary>
/// XMLProc 的摘要说明
/// 将数据写入XML文件的方法
/// SaveXML_DataSet()利用DataSet写入XML文件
/// SaveXML_XmlTextWriter()利用XmlTextWriter写入XML文件
/// SaveXML_XmlNode()利用XmlNode写入XML文件
///
/// 从XML文件中读取数据
/// GetXML_XmlTextReader()
/// GetXML_XmlNodeReader()
/// </summary>
public class XMLProc
{
public XMLProc()
{
 
//
 
// TODO: 在此处添加构造函数逻辑
 
//
}
   
/// <summary>
   
/// 利用XmlTextWriter不容易实现追加,也就是说每次写入XML文档的数据都是覆盖式的,不容易实现在原有数据的基础上追加数据,
   
/// 而采用XmlNode模式就能方便地实现数据追加
   
/// 利用DataSet也不是追加数据
   
/// </summary>
   
   
// 利用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 ] = pb.name;
            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方法写入文件头信息
           
// 例如<?xml version="1.0" encoding="utf-8"?>
            textWriter.WriteStartDocument();

           
// 写入根节点<phonebook></phonebook>
            textWriter.WriteStartElement( " phonebook " );
            textWriter.WriteStartElement(
" member " );

           
// 写入节点name
            textWriter.WriteStartElement( " name " , "" );
           
// 为name节点写入用户输入的值
            textWriter.WriteString(pb.name);
           
// 写入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(pb.name);
            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 += " <tr bgColor=#fff5b1><td> " + currentNodeName + " </td><td> " + xmltextreader.Value + " </td></tr> " ;
                }
               
if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals( " member " ))
                {
                    outMsg
+= " <tr><td>联系人:</td><td><font color=red>( " + (i ++ ) + " )</font></td></tr> " ;
                }
            }
            outMsg
= " <table> " + outMsg + " </table> " ;
           
// 关闭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 = " <table><tr><td collspan=2><font color=red>已经查找到下列联系人:</font></td></tr> " ;
           
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
+= " <tr bgcolor=#fff5b1><td align=right> " + currentNodeName + " :</td><td> " + xmltextreader.Value + " </td></tr> " ;
                }
               
// 如果已经找到了这个人,同时Xtr当前为文本类型,那么
            }
           
// 关闭xmltextreader
            xmltextreader.Close();
            outMsg
+= " </table> " ;

           
// 显示查找的人的详细信息
           
// 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 "" ;
    }
}

你可能感兴趣的:(xml)