2014-09-01 4 views
1

Я пытаюсь вернуть только один результат из следующего XML при поиске по UID:Как извлечь значение из XML с помощью LINQ?

<Photos> 
    <Photo UID="a3d508784ff3456da7bf2ff8ce08e577"> 
    <Date>2014-08-22T14:00:32.7958436+01:00</Date> 
    <File>a3d508784ff3456da7bf2ff8ce08e577.jpg</File> 
    <CrimeRef>CR123456/14</CrimeRef> 
    </Photo> 
    <Photo UID="735620a99f2c4dfd9f2c1870136e993e"> 
    <Date>2014-08-22T14:07:29.0364635+01:00</Date> 
    <File>735620a99f2c4dfd9f2c1870136e993e.jpg</File> 
    <CrimeRef>CR999999/99</CrimeRef> 
    </Photo> 
    <Photo UID="c186993e8a0246c29dd180396dfea47b"> 
    <Date>2014-08-22T14:07:29.6835282+01:00</Date> 
    <File>c186993e8a0246c29dd180396dfea47b.jpg</File> 
    <CrimeRef>CR999999/99</CrimeRef> 
    </Photo> 
</Photos> 

Я использую следующий код для этого:

var fileList = xml.Descendants("Photo") 
        .Where(e => e.Attribute("UID") != null 
         && (string)e.Attribute("UID").Value == ID) 
        .ToList(); 

var fileName = fileList[0]; 

Проблема заключается в том, что FileList [0] имеет весь XML-элемент, а не только имя файла:

enter image description here

есть ли anyw ay просто сделать эквивалент 'select File from' в LINQ, который позволит мне просто вернуть значение «File» для этого элемента? Я пытался делать это, не повезло:

var fileName = fileList[0]['File']; 

Большое спасибо

+3

Добавить '.Select (х => (строка) x.Element ("Файл"))' после 'Where' –

+0

Спасибо так много LB! Пожалуйста, добавьте в качестве ответа, и я приму это :) – Nick

ответ

4

Просто добавьте

.Select(x=>(string)x.Element("File")) 

после Where

PS: Кастинг XElement к типу безопаснее, поскольку она Wouldn 't также исключение, даже если тег файла не существует (просто возвращает null)

+1

Отлично работает, большое вам спасибо! – Nick

+0

+1 - не знал лакомый кусочек о литье. –

2

Select() в File узла Value свойство в вашем LINQ:

var fileList = xml.Descendants("Photo") 
     .Where(e => e.Attribute("UID") != null && (string)e.Attribute("UID").Value == ID) 
     .Select(n => n.Element("File").Value) 
     .ToList(); 
+0

Большое спасибо Cory, это отлично работает :) – Nick

+2

это вернет элемент, включая теги xml, а не значение. –

+1

@ Selman22: Исправлено. –

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