1

単純なLinqtoXmlクエリを作成して、serverOpenとのonlinePlayers値をそれぞれ2つのプロパティServerStatusとを持つクラスに抽出しようとしていPlayersます。

私が扱っているxmlは、次の単純な形式です。

<eveapi version="2">
   <currentTime>2013-02-10 05:27:33</currentTime>
   <result>
     <serverOpen>True</serverOpen>
     <onlinePlayers>32723</onlinePlayers>
   </result>
   <cachedUntil>2013-02-10 05:28:39</cachedUntil>
</eveapi>

これは非常に簡単な解決策になるはずだと思います。XMLには結果が1つしかないので、非常に簡単にクエリを実行できるようにしたいと思います。

私は次のようなことを試しましResultsた(XDocumentの私のxmlです):

var result = Results.Elements().Elements().First(); //successfully gets result
ServerStatus = result.Element("serverOpen").Value;  //this doesn't work
                       //null reference exception with .Value

また、すべてIEnumerablesを返す他のいくつかのクエリで、値を正常に抽出できたことはありません。

ありがとう。

4

3 に答える 3

2

特に結果がない場合は、代わりにここでxpathを使用する方が少し簡単です。

var serverStatus = (bool?)doc.XPathSelectElement("/eveapi/result/serverOpen");
var onlinePlayers = (int?)doc.XPathSelectElement("/eveapi/result/onlinePlayers");
于 2013-02-10T06:27:30.467 に答える
0

見落とされていたXDocumentメソッドを使用してSingle()、単一のresultXElementだけを取得することができました。次に、を使用Element()してXElementから正しいXElementを抽出しますresult

var result = Results.Descendants("result").Single();
ServerStatus = result.Element("serverOpen").Value;

より良い方法または別の派手な方法がある場合は、独自の提案を送信してください。

ありがとう。

于 2013-02-10T06:28:35.593 に答える
0

完全にはわかりませんが、Linqを正しく理解していれば、既にオブジェクトがあります。それ以外の:

ServerStatus = result.Element("serverOpen").Value;

行う:

ServerStatus = result.Value;

お役に立てれば。

于 2013-02-10T06:32:01.130 に答える