Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LINQ (Language-Integrated Query) > Linq to XML


Автор: RomaKiev 30.6.2011, 17:47
Доброго времени суток.
Пишу на Silverlight.
Есть такой XML-файл:

Код

@"<?xml version=""1.0""?>
            <Voprosi>
                <Tipi>
                <TipVoprosa Imja=""uporadovachivanije"">
                    <Vopros nomer=""1"">
                        Упорядочьте города по численности населения
                        <VariantiOtvetov Tip=""Poradok"" id1=""Нью-Йорк"" id2=""Бостон"" id3=""Москва"" id4=""Мадрид"" id5=""Киев""/>
                    </Vopros>
                    <Vopros nomer=""2"">
                         Упорядочьте события 
                         <VariantiOtvetov Tip=""Poradok""  id1=""Появление радио"" id2=""День взятия Бастилии"" id3=""Рождение А. С. Пушкина"" id4=""Рождение Наполеона"" id5=""Рождение Кенеди""/>
                    </Vopros>
                </TipVoprosa>
                </Tipi>
            </Voprosi>"




C помощью LINQ to XML Необходимо извлечь содержимое элемента <Vopros>, у которого значение 
атрибута nomer равно 2, то есть вопрос "Упорядочьте события". Как написать такой запрос, вернее больше интересует, как использовать спецификацию условия "where" в даном случае? 

Автор: MrGOD 3.7.2011, 00:03
Код

return  from el in XDocument.Load(CONFIGURATION_FILE_NAME).Root.Element("Tipi").Element("TipVoprosa").Elements("Vopros")
    where el.Attribute("nomer").Value == "2"
    select el;


Например как то так.

Автор: ДобренькийПапаша 4.7.2011, 10:38
Вот так получше будет:
Код

class Program
    {
        static void Main(string[] args)
        {            
            string xmlDoc = @"
           
                <TipVoprosa Imja='uporadovachivanije'>
                    <Vopros nomer='1'>
                        Упорядочьте города по численности населения
                        <VariantiOtvetov Tip='Poradok' id1='Нью-Йорк' id2='Бостон' id3='Москва' id4='Мадрид' id5='Киев'/>
                    </Vopros>
                    <Vopros nomer='2'>
                         Упорядочьте события 
                         <VariantiOtvetov Tip='Poradok' id1='Появление радио' id2='День взятия Бастилии' id3='Рождение А. С. Пушкина' id4='Рождение Наполеона' id5='Рождение Кенеди'/>
                    </Vopros>
                </TipVoprosa>
           ";

            XDocument document = XDocument.Parse(xmlDoc);            
            string currentName = document.Descendants("Vopros")
                                .Where(e => e.Attribute("nomer").Value == "2")
                                .Select(e => e.Value).First();
            Console.WriteLine(currentName);
           
            Console.ReadLine();
        }
    }

Автор: MrGOD 4.7.2011, 16:26
Тоже самое только другими словами)

Автор: ДобренькийПапаша 5.7.2011, 10:27
Цитата(MrGOD @  4.7.2011,  16:26 Найти цитируемый пост)
Тоже самое только другими словами) 

И работать будет быстрее из-за Descendents() сразу, а не через .Root.Element("Tipi").Element("TipVoprosa").Elements("Vopros")

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)