2016-03-03 2 views
0

Я пытаюсь разобрать XML-файл, что не является проблемой. Но мой xml-файл имеет несколько тегов <name>. Один для песни, а другой для художника. Я хочу исключить тег имени исполнителя, но я не могу понять, как это сделать.Анализ XML, исключая элементы

Вот мой код до сих пор:

 string xmlString; 
     using (WebClient wc = new WebClient()) 
     { 
      xmlString = wc.DownloadString(@"http://ws.audioscrobbler.com/2.0/?method=album.getInfo&album=awake&artist=Dream%20Theater&api_key=b5cbf8dcef4c6acfc5698f8709841949"); 
     } 
     List<XElement> alleElements = new List<XElement>(); 
     XDocument myXMLDoc = XDocument.Parse(xmlString); 
     List<XElement> trackNames = myXMLDoc.Descendants("album") 
          .Elements("tracks") 
          .Elements("name") 
          .ToList(); 


     foreach (XElement el in trackNames) 
     { 
      Console.WriteLine(el); 
     } 

     Console.WriteLine("-----End-----"); 
     Console.ReadLine(); 

Я попытался с помощью .Elements("name"); вместо потомков, но не возвращает ничего.

Вот небольшая часть моего файла XML:

<track rank="1"> 
    <name>6:00</name> 
    <url>http://www.last.fm/music/Dream+Theater/_/6:00</url> 
    <duration>331</duration> 
    <streamable fulltrack="0">0</streamable> 
    <artist> 
     <name>Dream Theater</name> 
     <mbid>28503ab7-8bf2-4666-a7bd-2644bfc7cb1d</mbid> 
     <url>http://www.last.fm/music/Dream+Theater</url> 
    </artist> 
</track> 

Есть ли способ, чтобы исключить <name> тег внутри тега <artist>.

Если я недостаточно ясен, сообщите мне, и я объясню это больше!

+0

Использование ' Элементы («имя») 'должны быть абсолютно точными. Если это не так, пожалуйста, покажите короткий, но * полный * пример (полный XML-документ и полное консольное приложение), показывая, что он не работает. –

+0

Это еще не полная программа. Мы должны иметь возможность копировать/вставлять/компилировать/запускать. Пожалуйста, прочитайте http://tinyurl.com/stack-hints –

+0

Мне очень жаль, я сделаю это в следующий раз. Ваш ответ сработал, спасибо! – RandomStranger

ответ

1

Похоже, вы просто хотите использовать Elements вместо Descendants, но в правом месте - неясно, где вы пытались его использовать. Я бы также рекомендовал использовать ToList, чтобы сделать вещи проще. Учитывая образец в documentation, это выглядит, как это будет работать и быть более ясным с точки зрения того, где мы ожидаем, что будет несколько элементов:

List<XElement> trackNames = doc.Root 
           .Element("tracks") 
           .Elements("track") 
           .Elements("name") 
           .ToList(); 
+0

Я попробовал, и получил этот результат: http://imgur.com/3QdFctc. Также это мой XML-файл: http://imgur.com/VzJhax0 – RandomStranger

+0

@Bas: Скриншоты очень сложны в использовании разделяя вашу проблему. Обновите свой вопрос коротким, но полным примером кода, XML и результатов * в виде текста *. Обратите внимание, что элементы предка XML могут быть очень важными из-за невыполнения пространства имен. –

+0

@Bas: см. Мое редактирование - мы искали имя непосредственно в 'tracks', а не' track' ... –

0

Вы можете попробовать исключить с условием, как myXMLDoc. ... .Descendants("name").Where(x => x.Parent.Name != "artist").

Смежные вопросы