通过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; } //销售价格
}