2013-12-23 4 views
0

У меня есть выражение LINQ, которое получает значения атрибута XML из XML-файла.Получение значения атрибута из xml в C#

var xml = XElement.Load(@"C:\\StoreServer1.xml"); 
var query = from e in xml.Descendants("Groups") 
      where int.Parse(e.Element("Store").Value) == 1500 
      select e.Element("Store").Attribute("WeekDayStClose").Value; 

И файл XML является:

enter<?xml version="1.0" encoding="utf-8" ?> 
<Stores> 
    <Groups Range="000"> 
     <Store WeekDayStClose="210" SatStClose="21" SunStClose="22">1500</Store> 
     <Store WeekDayStClose="23" SatStClose="24" SunStClose="25">18</Store> 
     <Store WeekDayStClose="23" SatStClose="24" SunStClose="25">19</Store> 
    </Groups> 
</Stores> 

Я только получаю результат атрибута (значение) для первого элемента 1500. Если я ищу то же самое для 18 она не возвращает никакого результата и никаких исключений. Любая помощь оценили .... Помощь Plz !!!

ответ

1

Попробуйте это: -

var xml = XElement.Load(@"C:\\StoreServer1.xml"); 
var query = xml.Descendants("Groups").Descendants("Store").Where(e => int.Parse(e.Value) == 18).Select(e=> e.Attribute("WeekDayStClose").Value); 
+0

Это помогло. Большое спасибо. Что случилось с моей ошибкой ... что я сделал? – prasuangelo

+0

Вы использовали 'e.Element (" Store ")' вместо 'Descendants (" Store ")' потому что 'Element'' Получает первый (в порядке заказа) дочерний элемент с указанным XName.' (source: MSDN) – erdinger

1

Вы должны быть более зернистая, вызовите подменю Descendants с Store (XName):

var xml = XElement.Load(@"C:\\New Folder\\StoreServer1.xml"); 
    var query = from e in xml.Descendants("Groups").Descendants("Store") 
       where int.Parse(e.Value) == 18 
       select e.Attribute("WeekDayStClose").Value; 

Потому что теперь вы извлечения только первыйStore каждого Group, который 1500.

0

Да, у вас есть немного ошибки в коде: Вы распределяете свой XML в групповых элементов (у вас есть только одна группа). Затем проверьте, если первый магазин элемент имеет значение 1500 (вы не Проверяется следующие элементы магазина имеют, может быть, значение 1500)

Вам нужно изменить свой код в следующие

 var query = from e in xml.Descendants("Store") 
        where int.Parse(e.Value) == 1500 
        select e.Attribute("WeekDayStClose").Value; 
+0

Есть только 1 'Stores' –

+0

Моя ошибка, я хотел написать« Store », –

Смежные вопросы