我在 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/