Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq + XML / 13 сообщений из 13, страница 1 из 1
31.08.2009, 16:22
    #36170983
Dima_Tr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Доброго времени суток. Помогите пожалуйста новичку в Linq с следующей задачей: Есть xml-ка
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="windows-1251"?>
<Place>
<PlaceName>A1</PlaceName>
<Products>
	<Product height=10>pencil</Product>
	<Product height=0>spoon</Product>
</Products>
</Place>
помогите в ней найти продукт у которого атрибут "height"=10 т.е. это должен быть "pencil". Просто найти имя места хранения у меня получилось, а с этим как-то никак.
...
Рейтинг: 0 / 0
31.08.2009, 16:38
    #36171028
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Значение атрибута только в кавычки возьмите.

Код: plaintext
1.
XElement el = doc.Element("Place").Element("Products").Elements("Product").Where(a => int.Parse(a.Attribute("height").Value) == 10).First();
            
...
Рейтинг: 0 / 0
31.08.2009, 16:39
    #36171034
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
;)
Код: plaintext
XDocument doc = XDocument.Load(@"C:\2.xml");
...
Рейтинг: 0 / 0
31.08.2009, 16:41
    #36171038
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Код: plaintext
XElement el = doc.Descendants("Product").Where(a => int.Parse(a.Attribute("height").Value) == 10).First();
...
Рейтинг: 0 / 0
31.08.2009, 16:46
    #36171056
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Вам же ж нутро нужно!
Код: plaintext
string s = doc.Descendants("Product").Where(a => int.Parse(a.Attribute("height").Value) == 10).First().Value;
...
Рейтинг: 0 / 0
31.08.2009, 16:54
    #36171072
Dima_Tr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Спасибо. Но Вы всегда получаете только одно значение, а их может быть сколько угодно.
...
Рейтинг: 0 / 0
31.08.2009, 16:59
    #36171081
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Код: plaintext
1.
List<XElement> el = doc.Descendants("Product").Where(a => int.Parse(a.Attribute("height").Value) == 10).ToList();
            
...
Рейтинг: 0 / 0
31.08.2009, 18:25
    #36171312
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Код: plaintext
1.
List<String> list = doc.Descendants("Product").Where(a => int.Parse(a.Attribute("height").Value) == 10).Select(n=>n.Value).ToList();
            
...
Рейтинг: 0 / 0
02.09.2009, 15:13
    #36174901
Dima_Tr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
И еще один вопросик: можно как-то сразу прочитать само содержимое элемента и значение его атрибута (например: pencil - 10) или это нужно делать по отдельности? Причина в том, что потом эти данный нужно будет бросать в базу, где и есть эти два поля(ProductName, ProductHeight).
...
Рейтинг: 0 / 0
02.09.2009, 15:59
    #36175045
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Код: plaintext
1.
2.
3.
Dictionary<string, int> dic = new Dictionary<string, int>();
            XDocument doc = XDocument.Load(@"C:\2.xml");
            dic = doc.Descendants("Product").Where(a => int.Parse(a.Attribute("height").Value) == 10).ToDictionary(l => l.Value, l => int.Parse(l.Attribute("height").Value));
            
...
Рейтинг: 0 / 0
02.09.2009, 16:15
    #36175082
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
при учёте, конечно, что имена "pencil" уникальны
...
Рейтинг: 0 / 0
02.09.2009, 18:00
    #36175383
Dima_Tr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Спасибо! Сделал сам таким образом
Код: plaintext
1.
2.
3.
4.
5.
6.
XDocument doc = XDocument.Load("...");
            IEnumerable<XElement> products = doc.Element("Place").Element("Products").Elements("Product");
            foreach (XElement item in wheels)
            {
                AddToDB(item.Value, int.Parse(item.Attribute("height").Value));  
            }
Но еще раз спасибо.
...
Рейтинг: 0 / 0
02.09.2009, 18:03
    #36175397
Dima_Tr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Linq + XML
Только в foreach не та коллекция...)
Код: plaintext
1.
2.
3.
4.
5.
foreach (XElement item in [color=red]products[/color])
            {
                AddToDB(item.Value, int.Parse(item.Attribute("height").Value));  
            }

...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq + XML / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]