开发者

Find XElement by Attribute value

开发者 https://www.devze.com 2022-12-09 21:42 出处:网络
I have a collection of IEnumerables and each one has a different attri开发者_如何学Pythonbute values that corresponds to a different property on my business object. Here is a sample of the XML that I

I have a collection of IEnumerables and each one has a different attri开发者_如何学Pythonbute values that corresponds to a different property on my business object. Here is a sample of the XML that I am querying against:

  <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> 

I think my linq2xml lambda is close (after searching MSDN and SO) but I can't seem to tweak it just right:

string cityName = simpleData.Where(a => a.Attribute("name").Value == "name").Select(a => a.Value).ToString();

The value of cityName get's assigned to "System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,System.String]" instead of ARLINGTON HEIGHTS

Any suggestions? Thanks


string cityName = (simpleData.Where(a => a.Attribute("name").Value == "name")
                  .Select(a => a.Value)).FirstOrDefault();

or

(from x in simpleData
where x.Attribute("name").Value == "name"
select x.Value).FirstOrDefault()

which returns an IEnumerable<string> (Linq extension methods almost always return collections and not single instances) containing all element values whose name attribute equals name. Then we take the first one, or null if its empty.

Also, that XML is horrendous and should be shot.


If you have the 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>

loaded in the XElement/XDocument SimpleDataList, you can query with XPath:

SimpleDataList.XPathSelectElement(@"//SimpleDataList/SimpleData[@Name=""name""]");

But I'm not sure if you have an XElement to start with or a simple IEnumerable... In any case.. i figured I'll mention XPath in case it helps you.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号