c# - 如何使用 Linq 解析 XML 文件 - 后代

标签 c# xml linq parsing

我在 C# 中使用 XDocument Linq-to-XML 解析以下 XML 时遇到问题:

<matches count="9">
<books count="4">
    <book>
        <key>books/batman_dark_knight_returns/frank_miller</key>
        <title>Batman: The Dark Knight Returns</title>
    </book>
    ...
</books>
<movies count="4">
    <movie>
        <key>movies/batman_tales_of_dark_knight/boy_kirklan</key>
        <title>Batman: Tales of the Dark Knight</title>
    </movie>
    ...
</movies>
<music count="1">
    <album>
        <key>music/dark_knight/hans_zimmer</key>
        <title>The Dark Knight</title>
    </album>
</music> </matches>

我非常非常错误的代码片段是

var data = from query in xmlFeed.Descendants("books")
           select new Book
           {
               Title = (string)query.Element("book").Element("title"),

               count = (string)query.Element("stickers").Element("sticker").Element("count")

           };

searchListBox.ItemsSource = data;

关于如何解析这样的 xml,它可以将书籍、电影、电视节目返回到可以绑定(bind)到列表框的长列表中,有什么帮助吗?

谢谢

最佳答案

怀疑你想要这样的东西:

var books = xmlFeed.Descendants("book").Select(x => Book.FromXElement(x));
var movies = xmlFeed.Descendants("movie").Select(x => Movie.FromXElement(x));
var albums = xmlFeed.Descendants("album").Select(x => Album.FromXElement(x));

// I'm assuming you're using .NET 4 here, otherwise it becomes slightly uglier.
var allResults = books.Concat<object>(movies).Concat(albums).ToList();

假设您向每个类添加一个静态 FromXElement 方法,我通常认为这是处理此类事情的一种干净方法。如果需要,您可以内联执行此操作,但是当您开始获取更多位时,它会使查询代码变得越来越大。

关于c# - 如何使用 Linq 解析 XML 文件 - 后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335056/

相关文章:

c# - 如何在 C# 中将此功能编写为通用扩展方法?

c# - 使用模型和 View (MVC)

c# - 将已编辑的 XML 文档保存到任何位置?

javascript - Device Stage 可视化编辑器要求

java - 在 JAXB 2.0 中扩展 JAXB 生成的对象

c# - 在表中,列数据类型为 varchar,使用 linq to sql 仅检索列中数字/数字的值

c# - 如何在文件夹中找到第二个最新文件

c# - 如何修改edmx的默认代码生成策略?

c# - UWP - 没有 Xaml 模板的 GridView

c# - Entity Framework 6 : The server was not found or was not accessible