簡體   English   中英

XmlTextWriter是寫Xml數據的最佳方法嗎

[英]Is XmlTextWriter The Best Way To Write Out Xml Data

我有一個要生成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,這就是該代碼的全部用途。

你們會有所不同嗎?

我認為有兩種選擇,一種使用針對List<Product>的自定義XmlSerializer ,或者更直接地使用Linq到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") ...等等。

我的代碼中有這個:

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

這會創建一個以“ arrayofitems”為根的.xml文件。

如何使用LINQ序列化數據? 網上有幾篇文章。 這是一個。 http://kiranpatils.wordpress.com/2008/09/23/generic-list-to-xml-using-linq/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM