【问题标题】:Parsing XML excluding elements解析 XML 不包括元素
【发布时间】:2016-03-03 08:35:23
【问题描述】:

我正在尝试解析 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"); 而不是 Descendants,但这根本没有返回任何内容。

这是我的 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>

有没有办法排除&lt;artist&gt;标签内的&lt;name&gt;标签。

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

【问题讨论】:

  • 使用Elements("name") 应该没问题。如果不是,请显示一个简短但完整的示例(完整的 XML 文档和完整的控制台应用程序)显示它无法正常工作。
  • 这仍然不是一个完整的程序。我们应该能够复制/粘贴/编译/运行。请阅读tinyurl.com/stack-hints
  • 很抱歉,我下次再做。不过,您的回答有效,谢谢!

标签: c# xml parsing xelement


【解决方案1】:

听起来您只是想使用Elements 而不是Descendants,但在正确的位置 - 不清楚您在哪里尝试使用它。我还建议使用ToList 让事情变得更简单。鉴于documentation 中的示例,看起来这会起作用,并且在我们期望有多个元素的位置方面更加清晰:

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

【讨论】:

  • 我试过了,我得到了这个结果:imgur.com/3QdFctc,这也是我的 XML 文件:imgur.com/VzJhax0
  • @Bas:截图是一种很难用的方式来分享你的问题。请使用简短但完整的代码、XML 和结果示例更新您的问题作为文本。请注意,由于命名空间默认设置,XML 的祖先元素可能非常重要。
  • @Bas:查看我的编辑 - 我们直接在 tracks 中查找名称,而不是 track...
  • @Bas:不,您还没有编辑问题。 在问题中包含一个小而完整的 XML 示例会更有用。但我已经编辑了答案,所以你应该可以使用它。
  • 你的回答成功了!我很抱歉不清楚,我会记住你所说的一切,以备将来的问题。感谢您的帮助!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多