2011-04-18 95 views
8

我需要經常創建XML文件,我選擇XmlWrite來完成這項工作,我發現它在WriteAttributeString(我需要在某些情況下需要寫很多屬性)這類東西花了很多時間,我的問題是有沒有更好的方法來創建XML文件?提前致謝。什麼是寫XML的最快方法

+0

您是否瞭解XML序列化?實例化一個類型,填充屬性,然後序列化它以創建一個表示對象狀態的XML文檔。 – Cheeso 2011-04-18 13:20:10

+0

你在正確的軌道上。 XmlWriter是編寫XML的最快方式。 – adatapost 2011-04-18 13:21:04

+0

定義「更快」。更快寫入/調試或更快執行?答案會有所不同。 – 2011-04-18 13:21:48

回答

3

通過例如FileStream(通過手動創建的代碼)將其直接寫入文件。這可以做得很快很快,但也很難維護。一如往常,優化帶有獎品標籤。

另外,不要忘記「premature optimization is the root of all evil」。

3

XmlSerializer

你只需要定義你想序列類層次結構,僅此而已。另外,您可以通過應用於屬性的一些屬性來控制架構。

0

使用匿名類型和序列化到XML是一個有趣的方法爲mentioned here

6
,我知道在兩個寫文檔結構作爲一個普通的字符串,並將其解析爲一個XDocument對象

的最快方法:

string str = 
@"<?xml version=""1.0""?> 
<!-- comment at the root level --> 
<Root> 
    <Child>Content</Child> 
</Root>"; 

XDocument doc = XDocument.Parse(str); 
Console.WriteLine(doc); 

現在您將擁有一個結構化且可隨時使用的XDocument對象,您可以在其中填充數據。此外,您甚至可以將完全結構化並填充的XML解析爲字符串,並從此處開始。您也可以隨時使用結構化XElements這樣的:

XElement doc = 
    new XElement("Inventory", 
    new XElement("Car", new XAttribute("ID", "1000"), 
    new XElement("PetName", "Jimbo"), 
    new XElement("Color", "Red"), 
    new XElement("Make", "Ford") 
) 
); 
doc.Save("InventoryWithLINQ.xml"); 

這將產生:

<Inventory> 
    <Car ID="1000"> 
    <PetName>Jimbo</PetName> 
    <Color>Red</Color> 
    <Make>Ford</Make> 
    </Car> 
</Inventory> 
+0

因爲您無法在運行時檢測到結構錯誤和拼寫錯誤,所以我沒有發現這種效率。 – Antoine 2011-04-18 13:23:38

+1

然後,您可以使用示例中的結構化XElement對象。 – 2011-04-18 13:38:58

0

是多少多少時間...是10毫秒,10秒或10分鐘......和寫一個Xml的整個過程有多少是?

不是說你不應該優化,而是你想花費多少時間來優化這個過程的一小部分。最後,你想要走得越快,在這種情況下(個人觀點)就越複雜。

0

我個人喜歡使用XmlDocument類型。編寫節點時仍然有點沉重,但屬性是單行的,並且使用Xmlwrite簡單得多。

相關問題