通过C#动态生成图书信息XML文件

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

  

复制代码 代码如下:

  <?xml version="1.0" encoding="iso-8859-1"?>

  <bookstore>

  <book id="1" category="CHILDREN">

  <title>Harry Potter</title>

  <author>J K. Rowling</author>

  <publishDate>2005-08-15</publishDate>

  <price>29.99</price>

  </book>

  <book id="2" category="WEB">

  <title>Learning XML</title>

  <author>Erik T. Ray</author>

  <publishDate>2003-10-18</publishDate>

  <price>39.95</price>

  </book>

  </bookstore>

  方法1:使用StringBuilder拼接XML

  

复制代码 代码如下:

  /// <summary>

  /// 创建图书信息XML

  /// </summary>

  public void CreateBookXML(string fileName)

  {

  StringBuilder xmlResult = new StringBuilder("<?xml version=\"1.0\" encoding=\"utf-8\"?>");

  List<BookInfo> bookList = GetBookList(); //获取图书列表

  if (bookList != null && bookList.Count > 0)

  {

  xmlResult.Append("<bookstore>");

  foreach (BookInfo book in bookList)

  {

  xmlResult.AppendFormat("<book id=\"{0}\" category=\"{1}\">", book.BookId, book.Category);

  xmlResult.AppendFormat("<title>{0}</title>", book.Title);

  xmlResult.AppendFormat("<author>{0}</author>", book.Author);

  xmlResult.AppendFormat("<publishDate>{0}</publishDate>", book.PublishDate.ToString("yyyy-MM-dd"));

  xmlResult.AppendFormat("<price>{0}</price>", book.Price);

  xmlResult.Append("</book>");

  }

  xmlResult.Append("</bookstore>");

  }

  //写入文件

  try

  {

  //1.创建文件流

  FileStream fileStream = new FileStream(fileName, FileMode.Create);

  //2.创建写入器

  StreamWriter streamWriter = new StreamWriter(fileStream);

  //3.将内容写入文件

  streamWriter.WriteLine(xmlResult);

  //4.关闭写入器

  streamWriter.Close();

  //5.关闭文件流

  fileStream.Close();

  }

  catch (Exception e)

  { }

  }

  方法2:使用XmlTextWriter类创建XML

  

复制代码 代码如下:

  /// <summary>

  /// 创建图书信息XML

  /// </summary>

  /// <param name="fileName"></param>

  public void CreateBookXML(string fileName)

  {

  try

  {

  FileStream fileStream = new FileStream(fileName, FileMode.Create);

  XmlTextWriter writer = new XmlTextWriter(fileStream, Encoding.UTF8);

  List<BookInfo> bookList = GetBookList(); //获取图书列表

  if (bookList != null && bookList.Count > 0)

  {

  writer.WriteStartDocument();

  writer.WriteStartElement("bookstore"); //创建父节点

  foreach (BookInfo book in bookList)

  {

  writer.WriteStartElement("book"); //创建子节点

  writer.WriteAttributeString("id", book.BookId.ToString()); //添加属性

  writer.WriteAttributeString("category", book.Category);

  //图书名称节点

  writer.WriteStartElement("title");

  writer.WriteValue(book.Title); //节点赋值

  writer.WriteEndElement();

  //图书作者节点

  writer.WriteStartElement("author");

  writer.WriteValue(book.Author);

  writer.WriteEndElement();

  //出版时间节点

  writer.WriteStartElement("publishDate");

  writer.WriteValue(book.PublishDate.ToString("yyyy-MM-dd"));

  writer.WriteEndElement();

  //销售价格节点

  writer.WriteStartElement("price");

  writer.WriteValue(book.Price);

  writer.WriteEndElement();

  writer.WriteEndElement(); //子节点结束

  }

  writer.WriteEndElement(); //父节点结束

  }

  writer.WriteEndDocument();

  writer.Close();

  fileStream.Close();

  }

  catch (Exception e)

  { }

  }

  XmlTextWriter类:表示提供快速、非缓存、只进方法的编写器,该方法生成包含 XML 数据的流或文件。

  WriteStartDocument()方法:编写XML的声明。

  WriteEndDocument()方法:关闭任何打开的元素或属性并将编写器重新设置为 Start 状态。

  WriteStartElement(string localName)方法:创建一个节点的开始。

  WriteAttributeString(string localName, string value)方法:给节点添加属性。

  WriteValue(value)方法:给节点赋值。

  3、其他代码

  3.1 获取图书列表

  

复制代码 代码如下:

  /// <summary>

  /// 获取图书列表

  /// </summary>

  /// <returns></returns>

  public List<BookInfo> GetBookList()

  {

  List<BookInfo> bookList = new List<BookInfo>();

  BookInfo book1 = new BookInfo() {

  BookId = 1,

  Category = "CHILDREN",

  Title = "Harry Potter",

  Author = "J K. Rowling",

  PublishDate = new DateTime(2005,08,15),

  Price = 29.99

  };

  bookList.Add(book1);

  BookInfo book2 = new BookInfo()

  {

  BookId = 2,

  Category = "WEB",

  Title = "Learning XML",

  Author = "Erik T. Ray",

  PublishDate = new DateTime(2003,10,18),

  Price = 39.95

  };

  bookList.Add(book2);

  return bookList;

  }

  3.2 图书信息实体类

  

复制代码 代码如下:

  /// <summary>

  /// 图书信息实体类

  /// </summary>

  public class BookInfo

  {

  public int BookId { set; get; } //图书ID

  public string Title { set; get; } //图书名称

  public string Category { set; get; } //图书分类

  public string Author { set; get; } //图书作者

  public DateTime PublishDate { set; get; } //出版时间

  public Double Price { set; get; } //销售价格

  }