我只想获取最后一个子节点date
,time
如果遇到alarm
具有值的节点,则在XML文件中true
:
XML看起来像这样:
<USER>
<date>09.07.2013</date>
<time>08:28</time>
<alarm>true</alarm>
</USER>
<USER>
<date>09.07.2013</date>
<time>08:23</time>
</USER>
<USER>
<date>09.07.2013</date>
<time>08:17</time>
<alarm>true</alarm>
</USER>
<USER>
<date>09.07.2013</date>
<time>08:15</time>
</USER>
我的代码是:
string URL = "http://IP";
HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest;
request.Credentials = new NetworkCredential("Username", "PW");
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
XmlReader xmlReader = XmlReader.Create(response.GetResponseStream());
XDocument temp = XDocument.Load(xmlReader);
var date = temp.Element("USER").Descendants("date").Select(node => node.Value.ToString()).First();
var time = temp.Element("USER").Descendants("time").Select(node => node.Value.ToString()).First();
}
正如我以前说过我只是想找回date
和time
若
<alarm>true</alarm>
遇到了。
一个更直接的替代方法是使用更老的XPath和XPathSelectElements来查找最后一个带有的USER alarm = true
,如下所示:
var lastUser = xdoc.XPathSelectElements("//USER[alarm='true']")
.LastOrDefault();
var lastUserDate = lastUser.Element("date").Value;
var lastUserTime = lastUser.Element("time").Value;
AFAIK这与Linq大致相同:
var lastUser = xdoc.Descendants("USER")
.LastOrDefault(u => u.Element("alarm") != null
&& u.Element("alarm").Value == "true");
var lastUserDate = lastUser.Element("date").Value;
var lastUserTime = lastUser.Element("time").Value;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句