使用元素(而不是IEnumerable)设置“属性”的简单Linq到Xml查询

本文关键字:属性 简单 Linq 查询 Xml 设置 元素 IEnumerable | 更新日期: 2023-09-27 17:58:36

我正在尝试编写一个简单的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,而我从未能够成功提取这些值。

谢谢。

使用元素(而不是IEnumerable)设置“属性”的简单Linq到Xml查询

在这里使用xpath会更容易一些,尤其是在没有结果的情况下。

var serverStatus = (bool?)doc.XPathSelectElement("/eveapi/result/serverOpen");
var onlinePlayers = (int?)doc.XPathSelectElement("/eveapi/result/onlinePlayers");

好吧,我能够使用一个被忽略的XDocument方法Single()来只获得一个resultXElement。然后使用Element()result XElement中提取正确的XElement。

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

如果有更好的方法或其他华而不实的方法,请提交你自己的建议。

谢谢。

我不完全确定,但如果我正确理解Linq,那么您已经拥有了您的对象。代替:

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

do:

ServerStatus = result.Value;

希望这能有所帮助。