2015-01-25 2 views
0

XML을 구문 분석하려고하는데 특정 요소가 아무 것도 반환하지 않습니다. 첫 번째 블록은 좋은 데이터를 반환하지만 아티스트 노드와 장소 노드는 모두 null을 반환합니다. 나는 무엇을 잘못하고 있는지 모르겠다.xml이 올바르게 구문 분석되지 않습니다.

XDocument xml = XDocument.Parse(data); 

var events = xml.Descendants("events"); 

foreach(var e in events) 
{ 
    foreach(var attribute in e.Descendants("event")) 
    { 
     string id = (string)attribute.Element("id"); 
     string Title = (string)attribute.Element("title"); 
     DateTime date = DateTime.Parse(((string)attribute.Element("datetime")), null, DateTimeStyles.RoundtripKind); 
     string TicketUrl = (string)attribute.Element("ticket_url"); 
     TicketType TicketType = (TicketType)Enum.Parse(typeof(TicketType), (string)attribute.Element("ticket_type")); 
     TicketAvailability TicketAvailability = (TicketAvailability)Enum.Parse(typeof(TicketAvailability), (string)attribute.Element("ticket_status")); 
     DateTime TicketSaleDate = DateTime.Parse(((string)attribute.Element("on_sale_datetime")), null, DateTimeStyles.RoundtripKind); 
     DateTime LastAvailabilityCheck = DateTime.Now; 
     string FacebookRsvpUrl = (string)attribute.Element("facebook_rsvp_url"); 
     string Description = (string)attribute.Element("description"); 
     List<Artist> artistData = new List<Artist>(); 
     Venue venue = new Venue(); 

     foreach (var artistNode in attribute.Descendants("artist")) 
     { 
      var artistName = (string)artistNode.Attribute("name"); 
      var junk = (string)artistNode.Attribute("mbid"); 
      var ImageUrl = (string)artistNode.Attribute("image_url"); 
      var ThumbnailUrl = (string)artistNode.Attribute("thumb_url"); 

      var FaceBookUrl = (string)artistNode.Attribute("facebook_tour_dates_url"); 

      artistData.Add(new Artist(artistName, ThumbnailUrl, ImageUrl, FaceBookUrl)); 
     } 

        foreach (var venueNode in attribute.Descendants("venue")) 
        { 
         var VenueName = (string)venueNode.Element("name"); 
         var City = (string)attribute.Element("city"); 
         var Region = (string)venueNode.Attribute("region"); 
         var Country = (string)venueNode.Attribute("country"); 
         var GpsLocation = (string)venueNode.Attribute("latitude") + ", " + (string)attribute.Attribute("longitude"); 
         venue = new Venue(VenueName, City, Region, Country, GpsLocation); 
        } 


     concerts.Add(new Concert(id, artistData, venue, date, TicketSaleDate, Description, FacebookRsvpUrl, Title, TicketUrl, TicketType, TicketAvailability, LastAvailabilityCheck)); 
    } 
} 

샘플 데이터 : 당신은 Attribute를 사용하고 있지만 XML 요소를 포함

<?xml version="1.0" encoding="UTF-8"?> 
<events> 
    <event> 
    <id>9203898</id> 
    <title>Fall Out Boy @ DTE Energy Music Theatre in Clarkston, MI</title> 
    <datetime>2015-07-10T19:00:00</datetime> 
    <formatted_datetime>Friday, July 10, 2015 at 7:00PM</formatted_datetime> 
    <formatted_location>Clarkston, MI</formatted_location> 
    <ticket_url>http://www.bandsintown.com/event/9203898/buy_tickets?app_id=BandJunkieForWindows&amp;artist=Fall+Out+Boy</ticket_url> 
    <ticket_type>Tickets</ticket_type> 
    <ticket_status>available</ticket_status> 
    <on_sale_datetime>2015-01-23T10:00:00</on_sale_datetime> 
    <facebook_rsvp_url>http://www.bandsintown.com/event/9203898?app_id=BandJunkieForWindows&amp;artist=Fall+Out+Boy&amp;came_from=67</facebook_rsvp_url> 
    <description></description> 
    <artists> 
     <artist> 
     <name>Fall Out Boy</name> 
     <mbid>516cef4d-0718-4007-9939-f9b38af3f784</mbid> 
     <image_url>http://www.bandsintown.com/FallOutBoy/photo/medium.jpg</image_url> 
     <thumb_url>http://www.bandsintown.com/FallOutBoy/photo/small.jpg</thumb_url> 
     <facebook_tour_dates_url>http://bnds.in/1n0W0qQ</facebook_tour_dates_url> 
     </artist> 
    </artists> 
    <venue> 
     <name>name</name> 
     <city>place</city> 
     <region>state</region> 
     <country>United States</country> 
     <latitude>142.748783</latitude> 
     <longitude>-183.380201</longitude> 
    </venue> 
    </event> 
</events> 

답변

1

.

foreach (var artistNode in attribute.Descendants("artist")) 
    { 
     var artistName = (string)artistNode.Element("name"); 
     // etc... 

는 또한 (!) 참고로, 대신 DateTime.Parse를 호출 DateTimeXElementXAttribute 전송할 수 있습니다 대신 사용 Element ... :

DateTime TicketSaleDate = DateTime.Parse(((string)attribute.Element("on_sale_datetime")), null, DateTimeStyles.RoundtripKind); 

이 난

DateTime TicketSaleDate = (DateTime)attribute.Element("on_sale_datetime"); 
+0

감사 할 수 있습니다 이 XML 파싱이 모든 종말점, 요소 및 노드와 함께 작동하는 방법을 여전히 배우고 있습니다. 구문 분석 할 현장 섹션을 가져올 수 없지만 감사 작업을 수행 할 수있었습니다. – shady

관련 문제