Найти XElement по значению атрибута
у меня есть коллекция IEnumerables, и каждый из них имеет разные значения атрибутов, которые соответствуют другому свойству моего бизнес-объекта. Вот пример XML, к которому я обращаюсь:
<SimpleData name="zip">60004</SimpleData>
<SimpleData name="name">ARLINGTON HEIGHTS</SimpleData>
<SimpleData name="state">IL</SimpleData>
<SimpleData name="countyname">COOK</SimpleData>
<SimpleData name="lat">42.1121336684356</SimpleData>
<SimpleData name="lon">-87.9736682731814</SimpleData>
Я думаю, что моя лямбда linq2xml близка (после поиска MSDN и т. д.), Но я не могу настроить ее правильно:
string cityName = simpleData.Where(a => a.Attribute("name").Value == "name").Select(a => a.Value).ToString();
значение cityName get присваивается "Система.В LINQ.Перечисляемый+WhereSelectEnumerableIterator ' 2[Система.XML.В LINQ.Система Элемент XElement.String] " вместо Арлингтон-Хайтс
какие предложения? Спасибо
2 ответов
string cityName = (simpleData.Where(a => a.Attribute("name").Value == "name")
.Select(a => a.Value)).FirstOrDefault();
или
(from x in simpleData
where x.Attribute("name").Value == "name"
select x.Value).FirstOrDefault()
который возвращает IEnumerable<string>
(методы расширения Linq почти всегда возвращают коллекции, а не отдельные экземпляры), содержащие все значения элементов,name
атрибут равен name
. Тогда мы возьмем первый, или null
если он пуст.
кроме того, этот XML ужасен и должен быть застрелен.
Если у вас есть XML-код:
<SimpleDataList>
<SimpleData name="zip">60004</SimpleData>
<SimpleData name="name">ARLINGTON HEIGHTS</SimpleData>
<SimpleData name="state">IL</SimpleData>
<SimpleData name="countyname">COOK</SimpleData>
<SimpleData name="lat">42.1121336684356</SimpleData>
<SimpleData name="lon">-87.9736682731814</SimpleData>
</SimpleDataList>
загруженный в XElement / XDocument SimpleDataList, вы можете запросить с XPath:
SimpleDataList.XPathSelectElement(@"//SimpleDataList/SimpleData[@Name=""name""]");
но я не уверен, есть ли у вас XElement для начала или простой IEnumerable... В любом случае.. я подумал, что упомяну XPath, если это поможет вам.