Знайомство з Linq to XML

вторник, 18 ноября 2008, Александр Краковецкий

Розповім основні принципи роботи з Linq to XML. Для тих, хто ніколи не працював з даною технологію, надіюсь, що ця інформація буде корисною.

1. Створення Xml файлу

// Назва xml файлу
string fileName = Server.MapPath("~/App_Data/Cars.xml");

int carIndex = 1;

// Створюємо файл
XDocument doc = new XDocument(
      new XElement("Cars",
        new XElement("Car",
          new XAttribute("Id", carIndex++),
          new XElement("Name", "Ford Mustang"),
          new XElement("Country", "USA")),
        new XElement("Car",
          new XAttribute("Id", carIndex++),
          new XElement("Name", "Audi R8"),
          new XElement("Country", "Germany")),
        new XElement("Car",
          new XAttribute("Id", carIndex++),
          new XElement("Name", "Nissan GTR"),
          new XElement("Country", "Japan"))
        )
      );

// Зберігаємо його
doc.Save(fileName);

Отримаємо:



 
    Ford Mustang
    USA
 

 
    Audi R8
    Germany
 

 
    Nissan GTR
    Japan
 

 

2. Отримання даних

    string fileName = Server.MapPath("~/App_Data/Cars.xml");
    XDocument doc = XDocument.Load(fileName);
    string output = string.Empty;
    
    // Проходимо по всім елементам
    foreach (XElement xelement in doc.Root.Elements())
    {
      // Виводимо атрибут Id
      output += string.Format("{0} {1}: ", xelement.Name, xelement.Attribute("Id").Value);
      
      // Виводимо дочірні елементи (назви і значення)
      foreach (XElement element in xelement.Elements())
      {
        output += string.Format("{0}: {1} ", element.Name, element.Value);
      }

      output += System.Environment.NewLine;
    }

Отримаємо в змінній output:

Car 1: Name: Ford Mustang Country: USA
Car 2: Name: Audi R8 Country: Germany
Car 3: Name: Nissan GTR Country: Japan

3. Зміна (Update) даних

    string fileName = Server.MapPath("~/App_Data/Cars.xml");
    XDocument doc = XDocument.Load(fileName);

    // Беремо перший дочірній елемент
    XNode node = doc.Root.FirstNode;

    if (node.NodeType == System.Xml.XmlNodeType.Element)
    {
      XElement element = node as XElement;
      element.Attribute("Id").Value = "5";
    }

    doc.Save(fileName);

Отримаємо змінений файл:



 
    Ford Mustang
    USA
 
 
    Audi R8
    Germany
 

 
    Nissan GTR
    Japan
 

4. Додавання (Insert) даних 

    string fileName = Server.MapPath("~/App_Data/Cars.xml");
    XDocument doc = XDocument.Load(fileName);
    XElement element = new XElement("Car",
              new XAttribute("Id", "10"),
              new XElement("Name", "Tata Nano"),
              new XElement("Country", "India"));
    doc.Root.Add(element);
    doc.Save(fileName);
 

Отримаємо змінений файл:



 
    Ford Mustang
    USA
 

 
    Audi R8
    Germany
 

 
    Nissan GTR
    Japan
 

 
    Tata Nano
    India
 

5. Видалення (Delete) даних 

     string fileName = Server.MapPath("~/App_Data/Cars.xml");
    XDocument doc = XDocument.Load(fileName);

    IEnumerable cars = doc.Root.Descendants("Car").Where(c => c.Attribute("Id").Value == "5");
    cars.Remove();
    doc.Save(fileName);

Отримаємо змінений файл:



 
    Audi R8
    Germany
 

 
    Nissan GTR
    Japan
 

 
    Tata Nano
    India
 

 6. Запити

Виведемо кількість машин, які випускаються в Індії:

    string fileName = Server.MapPath("~/App_Data/Cars.xml");
    XDocument doc = XDocument.Load(fileName);

    IEnumerable cars = doc.Root.Descendants("Car").Where(c => c.Element("Country").Value == "India");
    int count = cars.Count();

На виході count = 1.

Ось і все поки що. Користуйтесь!


Ищите нас в интернетах!

Комментарии

Свежие вакансии