asp.net对xml的操作
1.创建XML


public class CreateXML
{
#region 变量
private static string strPath = "~/news/videoInterview/xml/";
#endregion
public CreateXML()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
#region 创建Xml
/// <summary>
/// 返回虚拟路径相对应的物理文件路径
/// </summary>
/// <param name="strRoomID">房间ID</param>
/// <returns>路径</returns>
private static string addPath(string strRoomID)
{
string FilePath = System.Web.HttpContext.Current.Server.MapPath(strPath + strRoomID);
return FilePath;
}
/// <summary>
/// 创建Xml,返回路径
/// </summary>
/// <param name="RoomID">房间ID</param>
/// <returns>Xml路径1:用户信息XML路径2:聊天信息XML路径</returns>
public static string[] returnXmlPath(int RoomID)
{
string[] arrPath = new string[2];
string strRoomID = RoomID.ToString();
//建立与房间ID同名的文件夹
if (!System.IO.Directory.Exists(addPath(strRoomID)))
{
System.IO.Directory.CreateDirectory(addPath(strRoomID));
}
string userXmlPath = "http://www.cnblogs.com/news/videoInterview/xml/" + strRoomID + "/user" + strRoomID + ".xml"; //用户信息
string msgXmlPath = "http://www.cnblogs.com/news/videoInterview/xml/" + strRoomID + "/msg" + strRoomID + ".xml"; //聊天信息
//创建用户信息Xml
XmlTextWriter writerUser = new XmlTextWriter(System.Web.HttpContext.Current.Server.MapPath(userXmlPath), Encoding.UTF8);
writerUser.WriteStartDocument();
writerUser.WriteStartElement("UserInfo");
writerUser.WriteEndElement();
writerUser.WriteEndDocument();
writerUser.Close();
//创建聊天信息Xml
XmlTextWriter writerMsg = new XmlTextWriter(System.Web.HttpContext.Current.Server.MapPath(msgXmlPath), Encoding.UTF8);
writerMsg.WriteStartDocument();
writerMsg.WriteStartElement("MsgInfo");
writerMsg.WriteEndElement();
writerMsg.WriteEndDocument();
writerMsg.Close();
arrPath[0] = "xml/" + strRoomID + "/user" + strRoomID + ".xml";
arrPath[1] = "xml/" + strRoomID + "/msg" + strRoomID + ".xml";
return arrPath;
}
#endregion
#region 判断用户列表Xml中用户人数
/// <summary>
/// 返回房间用户人数
/// </summary>
/// <param name="RoomID">房间ID</param>
/// <returns>房间用户人数(0表示房间为空)</returns>
public static int returnUserXmlCount(int RoomID)
{
string strRoomID = RoomID.ToString();
int count = 0; //反回的人数
string userXmlPath = "http://www.cnblogs.com/news/videoInterview/xml/" + strRoomID + "/user" + strRoomID + ".xml"; //用户信息
XmlDocument xmldoc = readXmlDoc(System.Web.HttpContext.Current.Server.MapPath(userXmlPath));
//获取xml节点
count = xmldoc.DocumentElement.ChildNodes.Count;
return count;
}
#endregion
#region 读取XML
/// <summary>
/// 读取XML
/// </summary>
/// <param name="xmlPath">xml文件路径</param>
/// <returns>xml</returns>
private static XmlDocument readXmlDoc(string xmlPath)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlPath);
return xmldoc;
}
#endregion
}
2. 写入XML, 删除XML


public partial class news_videoInterview_hzChat : System.Web.UI.Page
{
#region 变量
string strRoomID = null; //房间ID
string strUserID = null; //用户ID
string strUserName = null; //用户名
string strContent = null; //聊天内容
//string strEuserID = null; //企业用户ID
//string strCorpName = null; //企业名称
string strUserType = null; //用户类型 0:企业, 1:个人
string strType = null;
#endregion
#region 页面加载
protected void Page_Load(object sender, EventArgs e)
{
//房间ID
if (Request.QueryString["rmid"] != null && Request.QueryString["rmid"].ToString() != "")
{
strRoomID = Request.QueryString["rmid"].ToString();
}
//聊天内容
if (Request.QueryString["content"] != null && Request.QueryString["content"].ToString() != "")
{
strContent = Request.QueryString["content"].ToString();
}
//反回类型 1:返回用户信息, 2:返回聊天信息, 3:删除用户信息
if (Request.QueryString["type"] != null && Request.QueryString["type"].ToString() != "")
{
strType = Request.QueryString["type"].ToString();
}
//个人用户ID
if (Session["puserID"] != null && Session["puserID"].ToString() != "")
{
strUserID = Session["puserID"].ToString();
strUserType = "1";
}
//个人用户姓名
if (Session["pRealName"] != null && Session["pRealName"].ToString() != "")
{
strUserName = Session["pRealName"].ToString();
}
//企业用户ID及名称
if (((CEUser)Session["euser"]) != null)
{
strUserID = (((CEUser)Session["euser"]).euserId).ToString();
strUserName = ((CEUser)Session["euser"]).corpName;
strUserType = "0";
}
if (!IsPostBack)
{
if (strType == "1")
{
InsertUserXML();
}
else if (strType == "2")
{
InsertMsgXML();
}
else if (strType == "3")
{
DelUserXML(strUserID);
}
//else
//{
// GetRoomName(strRoomID);
//}
}
}
#endregion
#region 根据房间ID得到房间名称
//private void GetRoomName(string rmid)
//{
// string strRoomName = B_videoRoom.VideoRoom_returnName(rmid);
// Response.Write(strRoomName);
//}
#endregion
#region 写入用户信息列表
/// <summary>
/// 写入用户信息列表
/// </summary>
private void InsertUserXML()
{
string userXmlPath = "~/news/videoInterview/xml/" + strRoomID + "/user" + strRoomID + ".xml"; //用户信息
XmlDocument xmldoc = readXmlDoc(Server.MapPath(userXmlPath));
if (!IsUser(xmldoc, strUserID) && strUserID != null)
{
//获得根节点
XmlNode root = xmldoc.SelectSingleNode("UserInfo");
//创建一个<Msg>节点
XmlElement xe1 = xmldoc.CreateElement("User");
XmlElement xesub1 = xmldoc.CreateElement("id");
//设置文本节点
xesub1.InnerText = strUserID;
//添加到<Msg>节点中
xe1.AppendChild(xesub1);
XmlElement xesub2 = xmldoc.CreateElement("name");
//设置文本节点
xesub2.InnerText = strUserName;
//添加到<Msg>节点中
xe1.AppendChild(xesub2);
XmlElement xesub3 = xmldoc.CreateElement("type");
//设置文本节点
xesub3.InnerText = strUserType;
//添加到<Msg>节点中
xe1.AppendChild(xesub3);
//添加到根节点<Comment>中
root.AppendChild(xe1);
//打印XML
printUserXML(xmldoc);
//保存在磁盘
xmldoc.Save(Server.MapPath(userXmlPath));
}
else
{
//打印XML
printUserXML(xmldoc);
}
}
#endregion
#region 删除用户信息列表
private void DelUserXML(string userid)
{
string userXmlPath = "~/news/videoInterview/xml/" + strRoomID + "/user" + strRoomID + ".xml"; //用户信息
XmlDocument xmldoc = readXmlDoc(Server.MapPath(userXmlPath));
int intCount = xmldoc.DocumentElement.ChildNodes.Count;
XmlNode node = xmldoc.SelectSingleNode("UserInfo");
XmlNodeList xnl = xmldoc.SelectSingleNode("UserInfo").ChildNodes;
foreach (XmlNode xn in xnl)
{
XmlElement xe = (XmlElement)xn;
if (xe.HasChildNodes)
{
XmlNode firstnode = xe.FirstChild;
if (firstnode.InnerText.ToString() == userid)
{
node.RemoveChild(xn);
}
}
}
//保存在磁盘
xmldoc.Save(Server.MapPath(userXmlPath));
}
#endregion
#region 写入用户聊天列表
/// <summary>
/// 写入用户聊天列表
/// </summary>
private void InsertMsgXML()
{
string msgXmlPath = "~/news/videoInterview/xml/" + strRoomID + "/msg" + strRoomID + ".xml"; //聊天信息
XmlDocument xmldoc = readXmlDoc(Server.MapPath(msgXmlPath));
if (strContent != null)
{
if (xmldoc.DocumentElement.ChildNodes.Count == 1000)
{
XmlNode delroot = xmldoc.SelectSingleNode("MsgInfo");
delroot.RemoveChild(delroot.FirstChild);
}
//获得根节点
XmlNode root = xmldoc.SelectSingleNode("MsgInfo");
//创建一个<Msg>节点
XmlElement xe1 = xmldoc.CreateElement("Msg");
XmlElement xesub1 = xmldoc.CreateElement("name");
//设置文本节点
xesub1.InnerText = strUserName;
//添加到<Msg>节点中
xe1.AppendChild(xesub1);
XmlElement xesub2 = xmldoc.CreateElement("time");
//设置文本节点
xesub2.InnerText = DateTime.Now.ToString();
//添加到<Msg>节点中
xe1.AppendChild(xesub2);
XmlElement xesub3 = xmldoc.CreateElement("content");
//设置文本节点
xesub3.InnerText = strContent;
//添加到<Msg>节点中
xe1.AppendChild(xesub3);
//添加到根节点<Comment>中
root.AppendChild(xe1);
//打印XML
printMsgXML(xmldoc);
//保存在磁盘
xmldoc.Save(Server.MapPath(msgXmlPath));
}
else
{
//打印XML
printMsgXML(xmldoc);
}
}
#endregion
#region 判断节点是否存在
/// <summary>
/// 判断XML节点中有没有重复的用户ID
/// </summary>
/// <param name="xmldoc">xml</param>
/// <param name="userid">用户ID</param>
/// <returns>true/false</returns>
private bool IsUser(XmlDocument xmldoc, string userid)
{
int intCount = xmldoc.DocumentElement.ChildNodes.Count;
for (int i = 0; i < intCount; i++)
{
if (xmldoc.DocumentElement.ChildNodes[i].ChildNodes[0].InnerText == userid)
{
return true;
}
}
return false;
}
#endregion
#region 读取XML
/// <summary>
/// 读取XML
/// </summary>
/// <param name="xmlPath">xml文件路径</param>
/// <returns>xml</returns>
public static XmlDocument readXmlDoc(string xmlPath)
{
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(xmlPath);
return xmldoc;
}
#endregion
#region 打印用户Xml
/// <summary>
/// 打印用户Xml
/// </summary>
/// <param name="xmldoc">xml</param>
private void printUserXML(XmlDocument xmldoc)
{
string strChat_UserInfo = null; //用户列表
int intUserCount = 0; //用户总数
intUserCount = xmldoc.DocumentElement.ChildNodes.Count;
string[] arrXml = new string[3];
strChat_UserInfo += "<div class='leftlisthead'>";
strChat_UserInfo += "参与者[<span style='color:#ff0000'>" + intUserCount.ToString() + "</span>]</div>";
strChat_UserInfo += "<div class='leftlistcontent'><ul class='userlistul'>";
for (int i = 0; i < intUserCount; i++)
{
for (int j = 0; j < 3; j++)
{
arrXml[j] = xmldoc.DocumentElement.ChildNodes[i].ChildNodes[j].InnerText;
}
strChat_UserInfo += "<li>" + arrXml[1] + "</li>";
}
strChat_UserInfo += "</ul></div>";
Response.Write(strChat_UserInfo);
}
#endregion
#region 打印聊天Xml
/// <summary>
/// 打印聊天Xml
/// </summary>
/// <param name="xmldoc">xml</param>
private void printMsgXML(XmlDocument xmldoc)
{
string strChat_MsgInfo = null; //聊天记录列表
int intMsgCount = 0; //聊天记录总数
intMsgCount = xmldoc.DocumentElement.ChildNodes.Count;
if (intMsgCount > 100)
{
intMsgCount = 100;
}
string[] arrXml = new string[3];
strChat_MsgInfo = "<div style='margin:5px;'>";
for (int i = intMsgCount-1; i >= 0; i--)
//for (int i=0; i<=intMsgCount - 1; i++)
{
for (int j = 0; j < 3; j++)
{
arrXml[j] = xmldoc.DocumentElement.ChildNodes[i].ChildNodes[j].InnerText;
}
if (i == intMsgCount - 1)
{
strChat_MsgInfo += "<span><font style='color:#666'>" + GetDateTime(arrXml[1]) + "</font> <font style='color:#666'>" + arrXml[0] + " 说:</font></span><br /> <span><font style='color:Blue'>" + arrXml[2] + "</font></span><br />";
}
else
{
strChat_MsgInfo += "<span style='color:#666'>" + GetDateTime(arrXml[1]) + " " + arrXml[0] + " 说:</span><br /> <span style='font-size:14px;'>" + arrXml[2] + "</span><br />";
}
}
strChat_MsgInfo += "</div>";
Response.Write(strChat_MsgInfo);
}
#endregion
#region 返回时间格式
/// <summary>
/// 返回自定义时间格式
/// </summary>
/// <param name="objDate">时间对像</param>
/// <returns>自定义时间格式</returns>
private string GetDateTime(object objDate)
{
DateTime dtDate;
string GetDate = "";
dtDate = Convert.ToDateTime(objDate);
GetDate = dtDate.Hour + ":" + dtDate.Minute + ":" + dtDate.Second;
return GetDate;
}
#endregion
}