2012-01-24 3 views
0

Я пытаюсь создать приложение C#, которое извлекает данные со страниц, таких как this. Это файл XML, в котором хранится информация о музыкальном альбоме. Вот соответствующий код:Извлечь список определенных элементов из XML

<resp stat="ok" version="2.0"> 
    <release id="368116" status="Accepted"> 
    <title>The Bends</title> 
    <tracklist> 
     <track> 
     <position>1</position> 
     <title>Planet Telex</title> 
     <duration>4:18</duration> 
     </track> 
    </tracklist> 
</release> 

Я хотел бы, чтобы извлечь все названия треков из альбома (в приведенном выше коде «Planet Telex») и выводить их в список, как это:

Planet Telex 
The Bends 
... 

Какой будет лучший/самый изящный способ сделать это? Из того, что я прочитал, XmlTextReader - хороший класс для использования. Я также видел много упоминаний о Linq to XML ... Спасибо заранее!

BTW, я снова разместил этот вопрос (хотя и сформулировал по-разному). Я не уверен, почему он был удален в прошлый раз.

+1

Возможно, это дубликат дубликатов дубликатов: http://stackoverflow.com/questions/1238528/parse-xml-document-in-c-sharp, http://stackoverflow.com/questions/2635618/parse -xml-from-string, http://stackoverflow.com/questions/55828/best-practices-to-parse-xml-files, http://stackoverflow.com/questions/8194155/c-sharp-parse-xml -file –

ответ

3

Если вы можете пойти с LINQ к XML:

XDocument doc = XDocument.Load(xml); 
var titles = doc.Descendants("title").Select(x => x.Value); 

более сложная версия, которая разграничивает альбома и название трека заключается в следующем:

var titles = doc.Descendants("release") 
       .Select(x => new 
          { 
           AlbumTitle = x.Element("title").Value, 
           Tracks = x.Element("tracklist") 
              .Descendants("title") 
              .Select(y => y.Value) 
          }); 

возвращает список анонимные типы, каждый со свойством AlbumTitle типа string и IEnumerable<string>, представляющий названия дорожек.

+0

Спасибо! Я только заметил, что забыл о важной информации. Я добавил его к вышеуказанному коду. – Daan

+0

И что это за новый тег? Название альбома? –

+0

Да, действительно, название альбома. – Daan

0

Используйте xsd.exe для создания структуры класса из вашего XML-файла, затем deserialize ваш XML в эту структуру классов. Это должно быть довольно просто.

0

Хотя LINQ, конечно, обоснованный подход, я полагал, что я хотел бы упомянуть, по крайней мере один быстрый вариант: XPath. Вот пример:

XPathDocument doc = new XPathDocument("http://api.discogs.com/release/368116?f=xml"); 
XPathNavigator nav = doc.CreateNavigator(); 
XPathNodeIterator iter = (XPathNodeIterator)nav.Evaluate("//tracklist/track/title"); 

while (iter.MoveNext()) 
{ 
    Console.WriteLine(iter.Current.Value); 
} 

Выход следующим образом:

, что я добавил е = XML на образец URL, так как выход по умолчанию из API
Planet Telex 
The Bends 
High And Dry 
Fake Plastic Trees 
Bones 
(Nice Dream) 
Just 
My Iron Lung 
Bullet Proof..I Wish I Was 
Black Star 
Sulk 
Street Spirit (Fade Out) 

Нота JSON.

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