XML в С# Урок 5. XDocument

.NET XML   24 ноября 2012  Автор статьи:  

Класс XDocument очень гибкий класс для работы с XML документами. Он хорошо подходит как для конструирование, так и для чтения XML файлов. Основанный на модели LINQ to XML он позволяет писать короткий и понятный код вместо тонны кода, как при использовании других классов. Его узлами являются объекты XNode от которых наследуются различные типы узлов. Для того, чтобы показать удобство работы с XDocument сгенерируем с помощью него XML следующего вида:




1
http://smolotochka.ru/TradeTable.aspx?CategoryID=41

Вторая
http://smolotochka.ru/TradeTable.aspx?SubCategoryID=38
Дома
http://smolotochka.ru/TradeTable.aspx?SubCategoryID=46
Дачи
http://smolotochka.ru/TradeTable.aspx?SubCategoryID=49
Стройматериалы, инструменты
http://smolotochka.ru/TradeTable.aspx?SubCategoryID=60
Окна, двери
http://smolotochka.ru/TradeTable.aspx?SubCategoryID=62
Супер подкатегория
http://smolotochka.ru/TradeTable.aspx?SubCategoryID=71




Видно, что в нем содержится главный узел с именем categories, внутри него содержится несколько узлов category, которые в свою очередь содержать элементы name (имя) и url (ссылка), а также элемент subcategories. В элементе subcategories содержатся элементы subcategory, который также как и элементы category содержат name и url. Таким образом данный XML будет отображать данные из базы данных, которая содержит две таблицы: Category и SubCategory, а также отображать связь между ними, так как в категорию будут вложены только подкатегории данной категории.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;

namespace CybernTools
{
public class Categories
{
public void Generate()
{
string path = AppDomain.CurrentDomain.BaseDirectory + "categories.xml";//путь до файла
XDocument doc = new XDocument(); //создаем класс XDocument
XElement xcategories = new XElement("categories"); //создали пустой элемент с именем categories
var categories = new BL.CategoryBL().GetAllCategory();//получили откуда нибудь массив категорий
foreach (var cat in categories)
{
XElement name = new XElement("name", cat.Name);//создаем текстовый узел
XElement url = new XElement("url", "http://smolotochka.ru/TradeTable.aspx?CategoryID=" + cat.ID.ToString());
XElement xsubCategories = new XElement("subcategories");
var subCategories = new BL.SubCategoryBL().GetSubCategoryByCategoryID(cat.ID);//получаем массив подкатегорий данной категории
XElement xcategory = new XElement("category", name, url, xsubCategories);//создаем узел category с тремя вложенными узлами
xcategories.Add(xcategory);
foreach(var subCategory in subCategories)
{
xsubCategories.Add(new XElement("name",subCategory.Name),
new XElement("url", "http://smolotochka.ru/TradeTable.aspx?SubCategoryID="+subCategory.ID.ToString()));
}
}
doc.Add(xcategories);
doc.Save(path);
}
}
}

Как видно из примера, класс LINQ to XML позволяет создавать не только пустые узлы, но и узлы с заданным значением. Кроме этого вы даже можете создать узел с любым количеством вложенных узлов, так как классы поддерживающие работу XDocument могут принимать на вход любое количество аргументов. (Имеется в виду, что у некоторых методов и конструкторов имеется массив параметров)

Научиться программировать

  • на Delphi

  • на Java

  • на C++