我想创建动态XML hieararchy,但仍然无法成功。我尝试过LinqToXml类和XML类,但我仍然不能。我想动态地在循环中创建这样的层次结构。
创建根节点
<Root></Root>
然后为它添加孩子。
<Root>
<Biggest></Biggest>
</Root>
然后为最后添加的节点添加子项
<Root>
<Biggest>
<Bigger>
</Bigger>
</Biggest>
</Root>
然后再回去添加另一个
<Root>
<Biggest>
<Bigger>
</Bigger>
<Another>
</Another>
</Biggest>
</Root>
编辑:我想举个例子。
XElement root = new XElement("root");
XElement first = new XElement("first", "value");
XElement second = new XElement("second", "Value");
root.Add(first);
//now how can add second node into first ??
//I don't want to add second one into first then add it into root.
答案 0 :(得分:4)
您可以直接创建xml结构:
XElement root = new XElement("root",
new XElement("first", "value",
new XElement("second", "Value")));
使用Element
:
root.Element("first").Element("second").Add(new XElement("third", "Value"));
//or
root.Descendants("second").First().Add(new XElement("underTheThird", "Value"));
添加到任何元素:
root.Add(new XElement("underTheSecond", 456));
等
Microsoft有几个可供阅读的文档 - 例如Reference (LINQ to XML)。
修改 - 收集了我在评论中发布的信息:
您可以先root.Add(first);
再做first.Add(second);
。你这样做的顺序并不重要。 Xml文档不像字符串那样构建,它是对象的层次结构 - 您可以在树中的任何位置添加新节点。
Add使用对象作为参数(与元素构造函数相同)。您可以添加任何XObject
(可以添加)和任何其他可转换为XText
的对象(字符串,数字,... - 主要使用XmlConvert
)。
Freshblood:我认为XmlLinkedNode类提供了我需要的东西。:
您可以使用NextNode
或PreviousNode
属性来获取兄弟节点,使用Parent
属性来获取当前节点的父节点。
虽然可以通过我在答案中发布的链接访问所有信息。
答案 1 :(得分:2)
如果我理解正确,你想创建XML元素然后回来并添加addtional子元素。您可能希望看一下使用XmLDocument类。
使用XElement,您也可以按照以下方式执行此操作
XElement root = new XElement("Root");
XElement biggest = new XElement("Biggest");
XElement bigger = new XElement("Bigger");
XElement another = new XElement("Another");
root.Add(biggest);
biggest.Add(bigger);
biggest.Add(another);
此处每个步骤都会添加到层次结构中,但在每个临时步骤中,层次结构都是有效的XML。
<强> 更新 强> 根据评论中的问题,我认为这就是你要找的东西
root.Add(biggest);
root.Element("Biggest").Add(bigger);
root.Element("Biggest").Add(another);
答案 2 :(得分:0)
不知道它是否有帮助,但我发现这些人的网站对使用xml文件非常有帮助。
http://www.codeproject.com/KB/XML/XML_Configuration_File.aspx
如果您使用它,请确保将所有实例包装在using..found中,这样做很难。