程序开发 > C# > 正文

C# xml文件生成创建(含带属性的)

亮术网 2020-08-26 本网原创

对于内容不多的文件,用 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);
  }

本文浓缩标签:xml生成创建