C#动态生成XML

时间:2022-12-12 16:03:28

通过C#动态生成图书信息XML文件(Books.xml),文件如下:

  1. <?xml version="1.0" encoding="iso-8859-1"?>  
  2. <bookstore>  
  3.   
  4.   <book id="1" category="CHILDREN">  
  5.     <title>Harry Potter</title>  
  6.     <author>J K. Rowling</author>  
  7.     <publishDate>2005-08-15</publishDate>  
  8.     <price>29.99</price>  
  9.   </book>  
  10.   
  11.   <book id="2" category="WEB">  
  12.     <title>Learning XML</title>  
  13.     <author>Erik T. Ray</author>  
  14.     <publishDate>2003-10-18</publishDate>  
  15.     <price>39.95</price>  
  16.   </book>  
  17.   
  18. </bookstore>
  19. 方法1:使用StringBuilder拼接XML
    1. /// <summary>  
    2. /// 创建图书信息XML  
    3. /// </summary>  
    4. public void CreateBookXML(string fileName)  
    5. {  
    6.     StringBuilder xmlResult = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>");  
    7.     List<BookInfo> bookList = GetBookList();    //获取图书列表  
    8.     if (bookList != null && bookList.Count > 0)  
    9.     {  
    10.         xmlResult.Append("<bookstore>");  
    11.         foreach (BookInfo book in bookList)  
    12.         {  
    13.             xmlResult.AppendFormat("<book id=\"{0}\" category=\"{1}\">", book.BookId, book.Category);  
    14.             xmlResult.AppendFormat("<title>{0}</title>", book.Title);  
    15.             xmlResult.AppendFormat("<author>{0}</author>", book.Author);  
    16.             xmlResult.AppendFormat("<publishDate>{0}</publishDate>", book.PublishDate.ToString("yyyy-MM-dd"));  
    17.             xmlResult.AppendFormat("<price>{0}</price>", book.Price);  
    18.             xmlResult.Append("</book>");  
    19.         }  
    20.         xmlResult.Append("</bookstore>");  
    21.     }  
    22.   
    23.     //写入文件  
    24.     try  
    25.     {  
    26.         //1.创建文件流    
    27.         FileStream fileStream = new FileStream(fileName, FileMode.Create);  
    28.         //2.创建写入器    
    29.         StreamWriter streamWriter = new StreamWriter(fileStream);  
    30.         //3.将内容写入文件    
    31.         streamWriter.WriteLine(xmlResult);  
    32.         //4.关闭写入器    
    33.         streamWriter.Close();  
    34.         //5.关闭文件流    
    35.         fileStream.Close();  
    36.     }  
    37.     catch (Exception e)  
    38.     { }  
    39. }  
    40. 方法2:使用XmlTextWriter类创建XML
      1. /// <summary>  
      2. /// 创建图书信息XML  
      3. /// </summary>  
      4. /// <param name="fileName"></param>  
      5. public void CreateBookXML(string fileName)  
      6. {  
      7.     try  
      8.     {  
      9.         FileStream fileStream = new FileStream(fileName, FileMode.Create);  
      10.         XmlTextWriter writer = new XmlTextWriter(fileStream, Encoding.UTF8);  
      11.         List<BookInfo> bookList = GetBookList();    //获取图书列表  
      12.         if (bookList != null && bookList.Count > 0)  
      13.         {  
      14.             writer.WriteStartDocument();  
      15.             writer.WriteStartElement("bookstore");    //创建父节点  
      16.             foreach (BookInfo book in bookList)  
      17.             {  
      18.                 writer.WriteStartElement("book");    //创建子节点  
      19.                 writer.WriteAttributeString("id", book.BookId.ToString());    //添加属性  
      20.                 writer.WriteAttributeString("category", book.Category);  
      21.                 //图书名称节点  
      22.                 writer.WriteStartElement("title");  
      23.                 writer.WriteValue(book.Title);    //节点赋值  
      24.                 writer.WriteEndElement();  
      25.                 //图书作者节点  
      26.                 writer.WriteStartElement("author");  
      27.                 writer.WriteValue(book.Author);  
      28.                 writer.WriteEndElement();  
      29.                 //出版时间节点  
      30.                 writer.WriteStartElement("publishDate");  
      31.                 writer.WriteValue(book.PublishDate.ToString("yyyy-MM-dd"));  
      32.                 writer.WriteEndElement();  
      33.                 //销售价格节点  
      34.                 writer.WriteStartElement("price");  
      35.                 writer.WriteValue(book.Price);  
      36.                 writer.WriteEndElement();  
      37.   
      38.                 writer.WriteEndElement();    //子节点结束  
      39.             }  
      40.             writer.WriteEndElement();    //父节点结束  
      41.         }  
      42.         writer.WriteEndDocument();  
      43.         writer.Close();  
      44.         fileStream.Close();  
      45.     }  
      46.     catch (Exception e)  
      47.     { }  
      48. }  
      49. XmlTextWriter类:表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据的流或文件。
        WriteStartDocument()方法:编写XML的声明。
        WriteEndDocument()方法:关闭任何打开的元素或属性并将编写器重新设置为 Start 状态。
        WriteStartElement(string localName)方法:创建一个节点的开始。
        WriteAttributeString(string localName, string value)方法:给节点添加属性。
        WriteValue(value)方法:给节点赋值。
      50. 获取图书列表
        1. /// <summary>  
        2. /// 获取图书列表  
        3. /// </summary>  
        4. /// <returns></returns>  
        5. public List<BookInfo> GetBookList()  
        6. {  
        7.     List<BookInfo> bookList = new List<BookInfo>();  
        8.     BookInfo book1 = new BookInfo() {   
        9.         BookId = 1,  
        10.         Category = "CHILDREN",  
        11.         Title = "Harry Potter",  
        12.         Author = "J K. Rowling",  
        13.         PublishDate = new DateTime(2005,08,15),  
        14.         Price = 29.99  
        15.     };  
        16.     bookList.Add(book1);  
        17.     BookInfo book2 = new BookInfo()  
        18.     {  
        19.         BookId = 2,  
        20.         Category = "WEB",  
        21.         Title = "Learning XML",  
        22.         Author = "Erik T. Ray",  
        23.         PublishDate = new DateTime(2003,10,18),  
        24.         Price = 39.95  
        25.     };  
        26.     bookList.Add(book2);  
        27.     return bookList;  
        28. }  
        29. 图书信息实体类

           

          [csharp]  view plain  copy
           
          1. /// <summary>  
          2. /// 图书信息实体类  
          3. /// </summary>  
          4. public class BookInfo  
          5. {  
          6.     public int BookId { set; get; }             //图书ID  
          7.     public string Title { set; get; }           //图书名称  
          8.     public string Category { set; get; }        //图书分类  
          9.     public string Author { set; get; }          //图书作者  
          10.     public DateTime PublishDate { set; get; }   //出版时间  
          11.     public Double Price { set; get; }           //销售价格  
          12. }