返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

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

时间:2017-11-06 22:45来源:知行网www.zhixing123.cn 编辑:麦田守望者

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

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):C#
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣