我在使用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的任何帮助,这些xml会将长书单中的书籍,电影,电视节目返回到列表框中吗?
由于
答案 0 :(得分:4)
我怀疑你想要的东西是:
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
方法,我通常认为这是处理这类事情的一种简洁方法。如果需要,可以内联,但是当你开始获取更多位时,它会使查询代码变得越来越大。
答案 1 :(得分:0)
如果所有key
后跟title
节点:
var all = xmlFeed.Descendants("key").Select(x => new {
Key = x.Value,
Title = ((XElement)x.NextNode).Value
// else the Title would be
// Title = x.Parent.Element("title").Value
}).ToList();
这将获得所有Key和Titles作为一个长列表。