3

Linq から XML に頭を悩ませようとしています。次のような XML ドキュメントがあります。

<update>
    <comments total="4">
        <comment>
            <person>
                <id>SomeID1</id>
                <name>SomeName1</name>
                <picture>PictureURL1</picture>
            </person>
            <message>Comment number 1</message>
        </comment>
        <comment>
            <person>
                <id>SomeID2</id>
                <name>SomeName2</name>
                <picture>PictureURL2</picture>
            </person>
            <message>Comment number 2</message>
        </comment>
        <comment>
            <person>
                <id>SomeID3</id>
                <name>SomeName3</name>
                <picture>PictureURL3</picture>
            </person>
            <message>Comment number 3</message>
        </comment>
        <comment>
            <person>
                <id>SomeID4</id>
                <name>SomeName4</name>
                <picture>PictureUR4L</picture>
            </person>
            <message>Comment number 4</message>
        </comment>
    </comments>
</update>

私がやりたいことは、最初の 2 つのコメントだけを取得することです。これは私のコードです:

var commentsList = (from comments in doc.Descendants("comments").Take(2)
                   select comments.Elements("comment"));

ドキュメントに 2 つ以下のコメントがある場合、これは正常に機能しますが、2 つを超えるコメントがある場合、次の例外が発生します。

タイプ「d__11」のオブジェクトをタイプ「System.Xml.Linq.XElement」にキャストできません

何か不足していますか?

編集:foreachループを使用してcommentsListをループしようとすると、例外がスローされることを忘れていました。.ToList() も使用してみましたが、それでも同じ例外が発生します。

4

2 に答える 2

2

コメント要素に直接ジャンプできます。

var commentsList = doc.Descendants("comment").Take(2);
于 2012-08-30T23:58:00.457 に答える
0

これを試して:

var commentsList = from comments in doc.Descendants("comments")
                   select comments.Elements("comment").Take(2);
于 2012-08-30T23:48:49.800 に答える