2009-06-16 69 views
14

我可以使用的XDocument建立以下文件,該文件工作正常如何使用foreach和LINQ構建XDocument?

XDocument xdoc = new XDocument 
(
    new XDeclaration("1.0", "utf-8", null), 
    new XElement(_pluralCamelNotation, 
     new XElement(_singularCamelNotation, 
      new XElement("id", "1"), 
      new XElement("whenCreated", "2008-12-31") 
     ), 
     new XElement(_singularCamelNotation, 
      new XElement("id", "2"), 
      new XElement("whenCreated", "2008-12-31") 
      ) 
     ) 
); 

然而,我需要建立由XML文件通過收集迭代這樣的:

XDocument xdoc = new XDocument 
(
    new XDeclaration("1.0", "utf-8", null)); 

foreach (DataType dataType in _dataTypes) 
{ 
    XElement xelement = new XElement(_pluralCamelNotation, 
     new XElement(_singularCamelNotation, 
     new XElement("id", "1"), 
     new XElement("whenCreated", "2008-12-31") 
    )); 
    xdoc.AddInterally(xelement); //PSEUDO-CODE 
} 

There is AddAddFirstAddAfter自我,AddBeforeSelf,但我不能讓他們在這方面工作。

像這樣可以迭代LINQ嗎?

答:

我把吉米的代碼暗示本根標籤,改變它一點,它正是我一直在尋找:

var xdoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null), 
    new XElement(_pluralCamelNotation, 
     _dataTypes.Select(datatype => new XElement(_singularCamelNotation, 
      new XElement("id", "1"), 
      new XElement("whenCreated", "2008-12-31") 
     )) 
    ) 
); 

馬克Gravell發佈更好的回答這on this StackOverflow question

回答

25

你需要一個根元素。

var xdoc = new XDocument(
    new XDeclaration("1.0", "utf-8", null), 
    new XElement("Root", 
     _dataTypes.Select(datatype => new XElement(datatype._pluralCamelNotation, 
      new XElement(datatype._singlarCamelNotation), 
      new XElement("id", "1"), 
      new XElement("whenCreated", "2008-12-31") 
     )) 
    ) 
); 
+0

很光滑,謝謝! – 2009-06-16 16:08:36

2

簡單的Add method有什麼問題?

+2

我猜測作者想要LINQ解決方案解決此問題,除非似乎沒有。其實,這是一個有趣的問題 - 如何將一個IEnumerable變成一個合適的參數列表=) – 2009-06-16 16:03:01

3

如果我沒有記錯,你應該能夠使用XDocument.Add():

XDocument xdoc = new XDocument 
(
    new XDeclaration("1.0", "utf-8", null)); 

foreach (DataType dataType in _dataTypes) 
{ 
    XElement xelement = new XElement(_pluralCamelNotation, 
     new XElement(_singularCamelNotation, 
     new XElement("id", "1"), 
     new XElement("whenCreated", "2008-12-31") 
    )); 
    xdoc.Add(xelement); 
} 
+2

當我使用該代碼時,我得到「這將創建一個錯誤結構的XML文檔」,我試圖用「測試」和「測試」,但同樣的錯誤。 – 2009-06-16 16:03:06

3

我知道這是非常非常老的文章,但我今天這個偶然發現試圖解決同樣的問題。您必須將元素添加到文檔的根目錄中:

xdoc.Root.Add(xelement);