2013-05-17 80 views
2

正如我在主題中寫的那樣,我該怎麼做?
注意,這樣的解決方案是不恰當的,因爲我想通過運行動態創建的子節點..如何使用XDocument動態生成XML文件?

new XDocument(
    new XElement("root", 
     new XElement("someNode", "someValue")  
    ) 
) 
.Save("foo.xml"); 

我想這是很清晰的第一次,但我會再寫一遍:

我需要能夠在運行時向給定的父節點添加子節點,在當前語法中,我寫過這是靜態生成的xml,它根本沒有貢獻我,因爲所有事先都知道,這不是我的案件。

你如何用Xdocument做到這一點,在那裏?

+1

有你嘗試過什麼? – tnw

+0

我試過了,所以我問,有這麼多的XML方法,它使我xonfused:'xmlWriter'' Xpath'' Xdocument'' xmlDocument' – CSharper

回答

4

很簡單

請更新您的代碼,因此

XmlDocument xml = new XmlDocument(); 
XmlElement root = xml.CreateElement("children"); 
xml.AppendChild(root); 

XmlComment comment = xml.CreateComment("Children below..."); 
root.AppendChild(comment); 

for(int i = 1; i < 10; i++) 
{ 
    XmlElement child = xml.CreateElement("child"); 
    child.SetAttribute("age", i.ToString()); 
    root.AppendChild(child); 
} 
string s = xml.OuterXml; 
+0

這是什麼動態? – tnw

+0

新XElement(「someNode」,「someValue」) 由於不知道他需要使用最低幀方法來實現動態值 –

+0

該行甚至不存在於您的代碼中。 *而且*你甚至不使用XDocument,這是OP正在尋找的。我不認爲你明白「動態」這個詞的意思。你迄今爲止所做的任何事情都是動態的。 – tnw

8

如果文檔定義的結構,應該充滿動態的數據,可以是這樣的:

// Setup base structure: 
var doc = new XDocument(root); 
var root = new XElement("items"); 
doc.Add(root); 

// Retrieve some runtime data: 
var data = new[] { 1, 2, 3, 4, 5 }; 

// Generate the rest of the document based on runtime data: 
root.Add(data.Select(x => new XElement("item", x))); 
+0

實際動態解決方案的+1 – tnw

+1

代碼的第一行使用'root',它在第二行中聲明... – vojta