2008-11-18 13 views
5

Estoy intentando seleccionar el campo "nombre" del nodo autor en una fuente ATOM utilizando LINQ. Puedo obtener todos los campos que necesito, así:Selección del campo de nombre de autor de la fuente Atom utilizando LINQ (C#)

XDocument stories = XDocument.Parse(xmlContent); 
XNamespace xmlns = "http://www.w3.org/2005/Atom"; 
var story = from entry in stories.Descendants(xmlns + "entry") 
      select new Story 
      { 
       Title = entry.Element(xmlns + "title").Value, 
       Content = entry.Element(xmlns + "content").Value 
      }; 

¿cómo iba a ir sobre la selección del autor -> campo de nombre en este escenario?

Respuesta

5

Es, básicamente, quieren:

entry.Element(xmlns + "author").Element(xmlns + "name").Value 

pero es posible que desee para envolver que, en un método adicional para que pueda tomar fácilmente las medidas oportunas si el autor o nombres de los elementos que faltan. También es posible que desee pensar en lo que desea que suceda si hay más de un autor.

La alimentación también puede tener un elemento de autor ... simplemente otra cosa a tener en cuenta.

+0

Perfecto, gracias! –

3

Podría ser algo como esto:

 var story = from entry in stories.Descendants(xmlns + "entry") 
        from a in entry.Descendants(xmlns + "author") 
        select new Story 
        { 
         Title = entry.Element(xmlns + "title").Value, 
         Content = entry.Element(xmlns + "subtitle").Value, 
         Author = new AuthorInfo(
          a.Element(xmlns + "name").Value, 
          a.Element(xmlns + "email").Value, 
          a.Element(xmlns + "uri").Value 
         ) 
        }; 
+0

Estaba pensando en usar algún tipo de LINQ anidado pero no estaba seguro de cómo hacerlo. Voy a jugar con tu sugerencia, ¡salud! –

Cuestiones relacionadas