1

オプションの属性の機能で、以下に説明するいくつかのxmlノードをソートしたいと思います

<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/">
<head>
    <meta name="dtb:uid" content="http://www.hxa7241.org/articles/content/epup-guide_hxa7241_2007_1.epub" />
</head>
<docTitle>
    <text>Roméo et Juliette</text>
</docTitle>
<navMap>
    <navPoint id="toc" playOrder="2">
        <navLabel>
            <text>Table des Matières</text>
        </navLabel>
        <content src="9789999997049_toc.html" />
    </navPoint>
    <navPoint id="tp" playOrder="1">
        <navLabel>
            <text>Page de Titre</text>
        </navLabel>
        <content src="9789999997049_tp.html" />
    </navPoint>
    <navPoint id="p01" playOrder="3">
        <navLabel>
            <text>ACTE PREMIER</text>
        </navLabel>
        <content src="9789999997049_p01.html" />
        <navPoint id="ch02" playOrder="5">
        <navLabel>
          <text>Sc&#232;ne 2</text>
        </navLabel>
        <navPoint id="ch01" playOrder="4">
            <navLabel>
                <text>Scène première</text>
            </navLabel>
            <content src="9789999997049_ch01.html" />
        </navPoint>
        <content src="9789999997049_ch02.html"/>
     </navPoint>
    </navPoint>
</navMap>

存在する場合は playOrder 属性の関数で navpoint ノードをソートし、存在しない場合は通常どおり xml を取得するにはどうすればよいですか? 最初に playOrder が存在するかどうかをテストしてから、別の Linq クエリを作成する必要がありますか、それとも単一のステートメントですべてを (場合によってはケースで) 処理することは可能ですか?

4

1 に答える 1

1

null許容型にキャストし、それによって順序付けするのが最も簡単です。

var sorted = navPoints.OrderBy(x => (int?) x.Attribute("playOrder"));

属性が存在しない場合は、null値になります。これらのエントリはすべて、ソートされたコレクションの最初(IIRC)になります。

于 2012-09-10T14:50:15.743 に答える