WebClient загружает много файлов: неверный URI: URI пуст

Я хочу скачать все исполнители альбомов с last.fm, чтобы каждая обложка была названа названием альбома. Но при запуске программы я получаю сообщение об ошибке: «Неверный URI: URI пуст».

код программы:

public static void GetXML()
        {
            string url = @"http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&artist=radiohead&api_key=b25b959554ed76058ac220b7b2e0a026";
            string albumName = String.Empty;
            string coverLink = String.Empty;
            int[] numArr = new int[30];

            for (int x = 1; x < numArr.Length; x++)
            {
                numArr[x] = x;   
            }

           XDocument xml = XDocument.Load(url);

           foreach (var c in numArr)
           {
               var name = xml.XPathSelectElements(String.Format("//album[@rank='{0}']", c))
                             .Select(x => x.Element("name").Value)
                             .ToList();
               foreach (var item in name)
               {
                   albumName = item.ToString();
               }

               var covers = xml.XPathSelectElements(String.Format("//album[@rank='{0}']/image[@size='extralarge']", c))
                          .Select(x => x.Value)
                          .ToList();
               foreach (var item in covers)
               {
                   coverLink = item.ToString();
               }

               WebClient web = new WebClient();
               web.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(web_DownloadFileCompleted);
               web.DownloadFileAsync(new Uri(coverLink), @"X:\Code\T\" + albumName + ".jpg");
           }

        }

person Jama Dharma    schedule 15.09.2012    source источник
comment
Так? URI пуст? Если да, то когда он пустой? Что вы пытались исправить в коде?   -  person svick    schedule 15.09.2012
comment
Какая линия? Вы не отладили? Каково значение URI и почему он может быть пустым? Вопросы, которые вы должны были задать себе, прежде чем задавать их здесь. Вы, вероятно, получите гораздо лучшие ответы, если проведете отладку и запишете результаты в свой вопрос.   -  person Adam    schedule 15.09.2012
comment
В вашем коде есть ошибки. Вы должны найти их (Visual Studio предоставляет встроенный отладчик, если вы его пропустили), а затем задать вопрос о вещах, которые вы не можете понять / не понимаете. Другой подход — просто заплатить кому-то за разработку кода для вас.   -  person Alexei Levenkov    schedule 15.09.2012
comment
http://stackoverflow.com/questions/9870909/deserialize-xml-in-complex-object прочитайте это, может быть, это поможет вам   -  person Anant Dabhi    schedule 15.09.2012


Ответы (1)


Вы инициализируете свой массив как

for (int x = 1; x < numArr.Length; x++)
{
      numArr[x] = x;   
}

но никогда не устанавливайте значение numArr[0], которое используется в foreach (var c in numArr) (и нет альбома с rank=0).

Разве это не намного проще?

 var albums = xml.Descendants("album")
        .Select(a => new
        {
            Rank = (int)a.Attribute("rank"),
            Name = a.Element("name").Value,
            ImageUrl = a.XPathSelectElement("image[@size='extralarge']").Value
        })
        .ToList();
person L.B    schedule 15.09.2012