Как я могу создать такое xieararcy? - PullRequest
0 голосов
/ 10 июля 2010

Я хочу создать динамическую иерархию XML, но все равно не смог добиться успеха. Я попробовал классы 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.

Ответы [ 3 ]

4 голосов
/ 10 июля 2010

Вы можете создать структуру 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 построен не как строка, это иерархия объектов - вы можете добавлять новые узлы в любом месте дерева.

Добавление использует объект в качестве параметра (так же, как конструктор элемента).Вы можете добавить любой XObject (который можно добавить) и любой другой объект, конвертируемый в XText (строка, числа, ... - в основном с использованием XmlConvert).

FreshbloodЯ думаю, что класс XmlLinkedNode предоставляет то, что мне нужно. :Вы можете использовать либо NextNode, либо свойство PreviousNode, чтобы получить братьев и сестер, и свойство Parent, чтобы получить родителя текущего узла.

Хотя вся эта информация доступна по имеющейся у меня ссылкеопубликовано в моем ответе.

2 голосов
/ 10 июля 2010

Если я правильно понимаю, вы хотите создать элементы XML, а затем вернуться и добавить дополнительные дочерние элементы.Возможно, вы захотите использовать для этого класс 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);
0 голосов
/ 10 июля 2010

Не знаю, поможет ли это, но я нашел сайт этого парня очень полезным для работы с XML-файлами.

http://www.codeproject.com/KB/XML/XML_Configuration_File.aspx

Если вы используете его, убедитесь, что вы завернули.все случаи использования .. найти это трудным путем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...