使用元素(而不是IEnumerable)设置“属性”的简单Linq到Xml查询
本文关键字:属性 简单 Linq 查询 Xml 设置 元素 IEnumerable | 更新日期: 2023-09-27 17:58:36
我正在尝试编写一个简单的Linq-to-Xml查询,以将serverOpen
和onlinePlayers
值提取到我的类中,该类分别具有两个属性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中只有一个结果,我希望能够非常简单地查询出来。
我已经尝试过(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,而我从未能够成功提取这些值。
谢谢。
在这里使用xpath会更容易一些,尤其是在没有结果的情况下。
var serverStatus = (bool?)doc.XPathSelectElement("/eveapi/result/serverOpen");
var onlinePlayers = (int?)doc.XPathSelectElement("/eveapi/result/onlinePlayers");
好吧,我能够使用一个被忽略的XDocument方法Single()
来只获得一个result
XElement。然后使用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;
希望这能有所帮助。