Tengo un archivo xml que devuelve un conjunto de elementos que son únicos por un valor de atributo. Esto presenta un problema, ya que no puedo seleccionar un nodo por su nombre:Linq a XML seleccionando un nodo bases en un valor de atributo
<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>
estoy usando LINQ para poblar una clase de "producto". Puedo seleccionar los elementos por posición, sin embargo, esto se convierte en un problema si el nodo no existe. ¿Hay alguna manera de seleccionar un nodo en función del valor de su atributo? En el siguiente ejemplo, ¿puedo obtener el nodo arr si el atributo @name = "ATR_FamilyName"? En XPath sería:
doc/arr[@name = 'ATR_FamilyName']/str
aquí es mi consulta LINQ 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....
};
Gracias Jon - Usted clavado. Me apropio de la respuesta rápida de todos – PhillyNJ
Thx para la explicación sobre el casting, Jon. Me encontré con situaciones en las que no todos los nodos tenían el atributo y arrojaba una excepción porque usaba .Value en lugar del molde; este fidex es –