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 "";
    }
}

 

轉自:http://www.cnblogs.com/lys_013/archive/2010/10/12/1848720.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章