---
title: "Простое преобразование Xml документа при помощи Linq2Xml."
description: "Недавно мне потребовалось преобразовать Rss в Xml нужного мне вида, для загрузки во временный кэш (р..."
author: "Hes"
published: "2014-10-23T00:45:13+00:00"
modified: "2014-10-24T01:33:39+00:00"
locale: "ru"
canonical_url: "https://yvision.kz/post/prostoe-preobrazovanie-xml-dokumenta-pri-pomoshchi-linq2xml-435356"
markdown_url: "https://yvision.kz/post/prostoe-preobrazovanie-xml-dokumenta-pri-pomoshchi-linq2xml-435356/markdown"
site_name: "Yvision.kz"
---

# Простое преобразование Xml документа при помощи Linq2Xml.

> Недавно мне потребовалось преобразовать Rss в Xml нужного мне вида, для загрузки во временный кэш (р...

Недавно мне потребовалось преобразовать Rss в Xml нужного мне вида, для загрузки во временный кэш (ресурс с которого выкачивается Rss может быть не доступен, а данные нужны здесь и сейчас). Для этого мне понадобился всего лишь Linq2Xml.

- public XElement Select()

- {

- return new XElement("root",

- new XAttribute("key", "news_cache"),

- XElement

- .Load("rss_url")

- .Element("channel")

- .Elements("item")

- .Take(5].ToInt()) //Нужно всего 5 новостей

- .Select(i => new XElement("news",

- new XAttribute("title", i.Element("title").Value),

- new XAttribute("link", i.Element("link").Value),

- new XAttribute("pubDate", i.Element("pubDate").Value),

- new XAttribute("description", i.Element("description").Value))));

- }

Пояснения к коду

 

1. Статический, защищенный от исключительных ситуаций, метод ToInt (преобразует строку в целочисленное значение):
- public static int ToInt(this object value, int @default = 0)

- {

- int result;
- if (ReferenceEquals(value, null)) return @default;
- return int.TryParse(value.ToString(), out result)

- ? result

- : @default;

- }

 

2. Что делает код вообще?

Код создает Xml-документ с корнем "root", загружает с указанного адреса Rss, забирает нужные мне элементы, и дальше исполняется лямбда-выражение, которое и создает проекцию полученных данных в новый xml документ.

3. Полученный результат.

 
 

-

-

-

-

-

-

-

 

4. [Другой путь.](http://msdn.microsoft.com/en-us/library/bb387079.aspx)

5. Работа над ошибками.

Статический метод Load класса XElement обладает побочным эффектом - он может выкинуть в любой момент исключительную ситуацию, причем заранее неизвестно какую. Требуется: написать перегрузку статического метода - то есть создать чистую функцию без побочных эффектов. Рассматриваются любые варианты.

---

Source: [https://yvision.kz/post/prostoe-preobrazovanie-xml-dokumenta-pri-pomoshchi-linq2xml-435356](https://yvision.kz/post/prostoe-preobrazovanie-xml-dokumenta-pri-pomoshchi-linq2xml-435356)