using System.Xml;
using System.IO;
/// <summary>
/// XMLProc 的摘要說明
/// 將數(shù)據(jù)寫入XML文件的方法
/// SaveXML_DataSet()利用DataSet寫入XML文件
/// SaveXML_XmlTextWriter()利用XmlTextWriter寫入XML文件
/// SaveXML_XmlNode()利用XmlNode寫入XML文件
///
/// 從XML文件中讀取數(shù)據(jù)
/// GetXML_XmlTextReader()
/// GetXML_XmlNodeReader()
/// </summary>
public class XMLProc
{
public XMLProc()
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
}
///<summary>
/// 利用XmlTextWriter不容易實現(xiàn)追加,也就是說每次寫入XML文檔的數(shù)據(jù)都是覆蓋式的,不容易實現(xiàn)在原有數(shù)據(jù)的基礎(chǔ)上追加數(shù)據(jù),
/// 而采用XmlNode模式就能方便地實現(xiàn)數(shù)據(jù)追加
/// 利用DataSet也不是追加數(shù)據(jù)
///</summary>
//利用DataSet把數(shù)據(jù)寫入XML文件,不實現(xiàn)追加
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里面的數(shù)據(jù)寫入XML
ds.WriteXml(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
return "true";
}
catch(Exception ex)
{
return ex.ToString();
}
}
//利用xmlTextWriter往XML文件寫入數(shù)據(jù),沒有實現(xiàn)追加
public static string SaveXMLData_XmlTextWriter(BaseInfo.Phonebook pb)
{
try
{
//創(chuàng)建一個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);
//開始寫過程,調(diào)用WriterStartDocument方法寫入文件頭信息
//例如<?xml version="1.0" encoding="utf-8"?>
textWriter.WriteStartDocument();
//寫入根節(jié)點<phonebook></phonebook>
textWriter.WriteStartElement("phonebook");
textWriter.WriteStartElement("member");
//寫入節(jié)點name
textWriter.WriteStartElement("name", "");
//為name節(jié)點寫入用戶輸入的值
textWriter.WriteString(pb.name);
//寫入name節(jié)點的結(jié)束符
textWriter.WriteEndElement();
textWriter.WriteStartElement("telphone", "");
textWriter.WriteString(pb.telphone);
textWriter.WriteEndElement();
……
//寫入文檔結(jié)束,調(diào)用WriteEndDocument方法
textWriter.WriteEndDocument();
//關(guān)閉textWriter
textWriter.Close();
return "true";
}
catch (Exception ex)
{
return ex.ToString();
}
}
//利用XmlNode往XML文件寫入數(shù)據(jù),可以實現(xiàn)追加
public static string SaveXMLData_XmlNode(BaseInfo.Phonebook pb)
{
try
{
//創(chuàng)建一個XmlDocument 對象,用于載入存儲信息的XML文件
System.Xml.XmlDocument xdoc = new XmlDocument();
xdoc.Load(System.Web.HttpContext.Current.Server.MapPath("phonebook.xml"));
//創(chuàng)建一個menber節(jié)點并將它添加到根節(jié)點下
XmlElement parentNode = xdoc.CreateElement("member");
xdoc.DocumentElement.PrependChild(parentNode);
//創(chuàng)建所有用于存儲信息的節(jié)點
XmlElement nameNode = xdoc.CreateElement("name");
XmlElement telphoneNode = xdoc.CreateElement("telphone");
……
///獲取文本信息
XmlText nameText = xdoc.CreateTextNode(pb.name);
XmlText telphoneText = xdoc.CreateTextNode(pb.telphone);
……
///將上面的各個存儲信息節(jié)點添加到menber節(jié)點下,但并不包含最終的值
parentNode.AppendChild(nameNode);
parentNode.AppendChild(telphoneNode);
……
///將上面獲取的文本信息添加到與之相對應(yīng)的節(jié)點中
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類實現(xiàn)的查找程序
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()方法循環(huán)讀取文件的節(jié)點
while (xmltextreader.Read())
{
//當(dāng)節(jié)點類型是元素的時候,記錄該節(jié)點名稱
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>聯(lián)系人:</td><td><font color=red>(" + (i++) + ")</font></td></tr>";
}
}
outMsg = "<table>" + outMsg + "</table>";
//關(guān)閉xmltextreader
xmltextreader.Close();
//顯示聯(lián)系人的詳細(xì)信息
//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>已經(jīng)查找到下列聯(lián)系人:</font></td></tr>";
string currentNodeName = "";
//利用xmltextreader對象的Read()方法自我表現(xiàn)讀取文件的節(jié)點
while (xmltextreader.Read())
{
//當(dāng)找到了要查找的人,并且當(dāng)前節(jié)點為元素,并且節(jié)點名稱為"member"時退出循環(huán)
if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Element && xmltextreader.LocalName.Equals("member"))
{
break;
}
//當(dāng)節(jié)點類型是元素的時候,記錄該節(jié)點名稱
if (xmltextreader.NodeType == System.Xml.XmlNodeType.Element)
{
currentNodeName = xmltextreader.LocalName.ToString();
}
//還沒有查找到指定的人,并且當(dāng)前節(jié)點類型為文本,并且當(dāng)前節(jié)點的節(jié)點值與要查找的人符合時
if ((findflag == false) && (xmltextreader.NodeType == System.Xml.XmlNodeType.Text) && (xmltextreader.Value == keyName))//當(dāng)為文本類型同時對應(yīng)的值為要查找的人的時候
{
findflag = true;//設(shè)置找到了要查找的人的標(biāo)志
}
//如果已經(jīng)找到,并且當(dāng)前節(jié)點類型為文本時,循環(huán)記錄這個人的所有信息
if (findflag == true && xmltextreader.NodeType == System.Xml.XmlNodeType.Text)
{
outMsg += "<tr bgcolor=#fff5b1><td align=right>" + currentNodeName + ":</td><td>" + xmltextreader.Value + "</td></tr>";
}
//如果已經(jīng)找到了這個人,同時Xtr當(dāng)前為文本類型,那么
}
//關(guān)閉xmltextreader
xmltextreader.Close();
outMsg += "</table>";
//顯示查找的人的詳細(xì)信息
//Response.Write(outMsg);
return outMsg;
}
}
//利用XmlNodeReader實現(xiàn)查找的程序
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 "";
}
}