I have an xml file that returns a set of elements that are unique in attribute value. This presents a problem since I cannot select node by its name:
<doc> <float name="score">1.2873721</float> <arr name="2_category"> <long>3021</long> </arr> <arr name="ATR_FamilyName"> <str>Some Cookbook </str> </arr> <arr name="ATR_IsFamily"> <str>0</str> </arr> <arr name="ATR_SellPrice"> <str>49.95</str> </arr> <arr name="ATR_VendorId"> <str>ABC</str> </arr> <arr name="ATR_VendorName"> <str>WROX</str> </arr> </doc>
I am using linq to populate the Product class. I can select elements by position, however this becomes a problem if node does not exist. Is there a way to select a node based on the value of its attribute? In the example below, is it possible to get the arr node attribute if the @name = "ATR_FamilyName" attribute? In xpath, it will be:
doc/arr[@name = 'ATR_FamilyName']/str
here is my linq request to xml:
var query = from rt in results where (String)rt.Descendants().ElementAt(5).Element("str").Value == "0" select new Product.Product { FamilyName = (String)rt.Descendants().ElementAt(3).Value // doc/arr[@name = 'ATR_FamilyName']/str - select Family Name is arr/@name 'ATR_FamilyName' MorePropertiestoset.... };
source share