2013-05-17 37 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