解析XML,不包括元素

时间:2016-03-03 08:35:23

标签: c# xml parsing xelement

我试图解析一个xml文件,这不是问题所在。但我的xml文件有多个<name>标签。一个是歌曲,另一个是艺术家。我想排除艺术家姓名标签,但我无法弄清楚如何。

到目前为止,这是我的代码:

        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>标记。

如果我不够清楚,请告诉我,我会再解释一下!

2 个答案:

答案 0 :(得分:1)

听起来您只想使用Elements代替Descendants,但在正确的位置 - 您不清楚尝试使用它的位置。我还建议使用ToList来简化操作。鉴于documentation中的示例,看起来这样可以工作,并且在我们期望有多个元素的位置上更清晰:

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

答案 1 :(得分:0)

您可以尝试排除条件,例如myXMLDoc. ... .Descendants("name").Where(x => x.Parent.Name != "artist").