1

我正在尝试编写一个简单的 Linq to Xml 查询来将serverOpenonlinePlayers值提取到我的类中,该类分别具有两个属性ServerStatusPlayers

我正在处理的 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 中只有一个结果,我希望能够非常简单地查询出来。

我已经尝试过(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 中提取正确的resultXElement。

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 回答