XmlTextWriter是写出Xml数据的最佳方式

时间:2011-03-21 16:20:10

标签: c# xml

我有一个我想要生成xml的产品列表,目前所有产品都保存在List<>中对象....

 List<Product> products= DataAccess.GetProducts();
            XmlTextWriter writer = new XmlTextWriter(@"C:\ProductsToXml.xml", null);

            writer.WriteComment("Nick's Test Products To Xml.");

            writer.WriteStartElement("xml");

            writer.WriteStartElement("Product");
            writer.WriteStartElement("Name");
            writer.WriteString("Almonds");
            writer.WriteEndElement();

            //end for product
            writer.WriteEndElement();

            //end for xml
            writer.WriteEndElement();
            writer.Close();

现在我将使用这个骨架并遍历所有产品并添加xml,就像上面的骨架一样。事情是有很多writer.WriteStartElement指令,因为我的产品中有很多数据。我不确定这是否是创建xml文件的最佳方式,或者它是否重要?这种方法对我正在做的事情是否正常?基本上采用一个产品对象,其中包含一堆属性并从中创建xml,这就是代码的所有目的。

你们会这样做吗?

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:1)

我认为有两种选择,一种是为XmlSerializer使用自定义List<Product>,或者更直接地使用Linq to XML来序列化您的产品:

List<Product> products = new List<Product>();
products.Add(new Product() { Id =1, Name="Foo"});
products.Add(new Product() { Id =2, Name="Bar"});

XElement xDoc = new XElement("Products", products.Select(p => new XElement("Product", 
                                                         new XAttribute("id", p.Id), 
                                                         new XAttribute("name", p.Name))));
xDoc.Save(@"testOut.xml");

<强>输出:

<?xml version="1.0" encoding="utf-8"?>
<Products>
  <Product id="1" name="Foo" />
  <Product id="2" name="Bar" />
</Products>

修改:

Linq to XML中的组合非常简单 - 所以如果我想要一个“Stuff”的外部节点,我可以只添加该节点(并在末尾添加一个括号):

XElement xDoc = new XElement("Stuff", 
                             new XElement("Products", products.Select(p => new XElement("Product", 
                                                                           new XAttribute("id", p.Id), 
                                                                           new XAttribute("name", p.Name)))));

您可以为“类别”列表复制此方法,只需拥有new XElement("Categories") ...等等。

答案 2 :(得分:0)

我的代码中有这个:

XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<Item>));
TextWriter textWriter = new StreamWriter(@"items.xml");
serializer.Serialize(textWriter, items);
textWriter.Close();

创建一个带有'arrayofitems'根的.xml文件。

答案 3 :(得分:0)

如何使用LINQ来序列化数据?网上有几篇文章。这是一个。 http://kiranpatils.wordpress.com/2008/09/23/generic-list-to-xml-using-linq/