C# xml文件生成创建(含带属性的)
对于内容不多的文件,用 xml 保存也是可选方案。例如,软件、网站的配置信息,程序运行日志等,都可以用 xml 文件保存。文件不大,既方便处理,又不影响程序执行速度;不需要第三方支持,移植方便。
xml文件一般都由程序动态生成,所以要使用它,必须懂得怎么用程序生成xml文件。文章将探讨C#生成xml文件的两种方法,一种是不带属性的,另一种是带属性的,以满足开发过程中的多种需要。
一、C#生成xml文件(不带属性)
该示例介绍普通 C# xml文件创建方法,只生成两级节点的 xml 文件。在实际开发中,可用于记录网站运行出错信息、网站和软件配置信息等。代码如下(生成程序出错日志示例):
using System.IO;
using System.Xml;
private string filePath = @"G:\xq\test\log.xml";
/// <summary>
/// C#创建xml文件
/// </summary>
private void CreateXmlFile()
{
try
{
FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
sw.BaseStream.Seek(0, SeekOrigin.End);
sw.WriteLine("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
sw.WriteLine("<Logs>");
sw.WriteLine("</Logs>");
sw.Flush();
sw.Close();
fs.Close();
}
catch(Exception ex)
{
throw new ArgumentNullException(ex.Message);
}
}
/// <summary>
/// C# xml文件生成程序出错日志示例
/// </summary>
/// <param name="ex">异常</param>
public void CreateLogs(Exception ex)
{
CreateXmlFile();
XmlDocument xDoc = new XmlDocument();
xDoc.Load(filePath);
XmlNodeList xnl = xDoc.SelectNodes("Logs/Log");
XmlNode rootNode = xDoc.SelectSingleNode("//Logs");
//生成结点
XmlNode xnLog = xDoc.CreateNode("element", "Log", "");
XmlNode xnLogDate = xDoc.CreateNode("element", "LogDate", "");//日期
XmlNode xnMessage = xDoc.CreateNode("element", "Message", "");//错误消息
XmlNode xnSource = xDoc.CreateNode("element", "Source", "");//错误源
XmlNode xnStack = xDoc.CreateNode("element", "Stack", "");//堆栈内容
XmlNode xnTargetSite = xDoc.CreateNode("element", "TargetSite", "");//堆栈内容
XmlNode xnRawUrl = xDoc.CreateNode("element", "RawUrl", "");//错误页
//添加数据
xnLogDate.InnerText = DateTime.Now.ToString();
xnMessage.InnerText = ex.Message;
xnSource.InnerText = ex.Source.ToString();
xnStack.InnerText = ex.StackTrace.ToString();
xnTargetSite.InnerText = ex.TargetSite.ToString();
xnRawUrl.InnerText = HttpContext.Current.Request.Url.PathAndQuery.ToString();
xnLog.AppendChild(xnLogDate);
xnLog.AppendChild(xnMessage);
xnLog.AppendChild(xnSource);
xnLog.AppendChild(xnStack);
xnLog.AppendChild(xnTargetSite);
xnLog.AppendChild(xnRawUrl);
rootNode.AppendChild(xnLog);
try
{
xDoc.Save(filePath);
}
catch (Exception e)
{
throw new ArgumentNullException(e.Message);
}
}
调用方法:
Exception ex = Server.GetLastError().GetBaseException();
CreateLogs(ex);
二、C#生成xml文件(带属性)
该示例介绍 C# xml文件生成结点带属性的方法,生成三级节点的 xml 文件,更多级依次类推即可。代码如下:
/// <summary>
/// C# xml文件生成带属性示例
/// </summary>
private void CreateXmlWithAttribute()
{
CreateXmlFile();
XmlDocument xDoc = new XmlDocument();
XmlNode rootNode = xDoc.SelectSingleNode("//Logs");
//一级结点
XmlElement xeLog = xDoc.CreateElement("Log");
xeLog.SetAttribute("id", "1");//设置属性
//二级结点
XmlElement xeSe = xDoc.CreateElement("se");
xeSe.SetAttribute("id", "1-1");
xeSe.SetAttribute("value", "二级结点");
//三级结点
XmlElement xeTh = xDoc.CreateElement("th");
xeTh.InnerText = "三级结点";
xeSe.AppendChild(xeTh);
xeLog.AppendChild(xeSe);
rootNode.AppendChild(xeLog);
}