2

XDocumentC#で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を解析する方法についてのヘルプはありますか?

ありがとう

4

2 に答える 2

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メソッドを追加することを前提としています。これは、この種のことを処理するためのクリーンな方法であることが一般的にわかっています。必要に応じてインラインで行うこともできますが、より多くのビットをフェッチし始めると、クエリ コードがどんどん大きくなります。

于 2012-07-04T20:27:36.990 に答える