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、方法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、 方法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; }           //销售价格
}


  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pan_junbiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值