我正在尝试编写一个简单的Linq to Xml查询,将serverOpen
和onlinePlayers
值提取到我的类中,该类分别有两个属性ServerStatus
和Players
。 / p>
我正在处理的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,我从来没有能够成功提取值。
感谢。
答案 0 :(得分:2)
在这里使用xpath会更容易一些,特别是如果没有结果的话。
var serverStatus = (bool?)doc.XPathSelectElement("/eveapi/result/serverOpen");
var onlinePlayers = (int?)doc.XPathSelectElement("/eveapi/result/onlinePlayers");
答案 1 :(得分:0)
好吧,我能够使用一个被忽略的XDocument方法Single()
来获得单个result
XElement。然后使用Element()
从result
XElement中提取正确的XElements。
var result = Results.Descendants("result").Single();
ServerStatus = result.Element("serverOpen").Value;
如果有更好的方式或其他华丽的方式,请提交您自己的建议。
感谢。
答案 2 :(得分:0)
我不完全确定,但如果我正确理解Linq,你已经拥有了你的对象。 而不是:
ServerStatus = result.Element("serverOpen").Value;
做的:
ServerStatus = result.Value;
希望这有帮助。