2008-11-18 7 views
5

Próbuję wybrać pole "nazwa" z węzła autora w kanale ATOM za pomocą LINQ. Mogę uzyskać wszystkie pola, których potrzebuję:Wybieranie pola nazwy autora z kanału informacyjnego Atom przy użyciu 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 
      }; 

Jak mam wybrać autora -> pole nazwy w tym scenariuszu?

Odpowiedz

5

Zasadniczo chcemy:

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

Ale może chcesz zawinąć że w dodatkową metodę, dzięki czemu można łatwo podjąć odpowiednie działania, jeżeli elementy albo autor lub nazwa brakuje. Możesz również pomyśleć o tym, co chcesz zrobić, jeśli jest więcej niż jednego autora.

Kanał może również zawierać element autora ... należy pamiętać o jeszcze jednej rzeczy.

+0

Perfect, dzięki! –

3

To może być coś takiego:

 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

Myślałem o użyciu jakiegoś zagnieżdżonego LINQ, ale nie byłem pewien, jak to zrobić. Będę grał z twoją sugestią, okrzyki! –