C#如何按属性查询XML(使用XPath)

anlaetion 2011-08-11 03:36:45

<?xml version="1.0" encoding="UTF-8"?>
<Chats>
<DateTime value="2011-06-30">
<Message>
<FromUserID value="333" />333</FromUserID>
<FromUserName value="444" />
<FromUserType value="2" />
<ToUserID value="110" />
<Message value="hihihihihihi" />
<MessgType value="2" />
<SendDataTime value="15:58:00" />
</Message>
<Message>
<FromUserID value="333" />
<FromUserName value="444" />
<FromUserType value="2" />
<ToUserID value="110" />
<Message value="hihihihihihi" />
<MessgType value="2" />
<SendDataTime value="16:00:00" />
</Message>
</DateTime>
<DateTime value="2011-07-13">
<Message>
<FromUserID value="1" />
<FromUserName value="asdfsaf" />
<FromUserType value="1" />
<ToUserID value="110" />
<Message value="asdfsadf" />
<MessgType value="2" />
<SendDataTime value="2011-07-13 03:30:38" />
</Message>
<Message>
<FromUserID value="1" />
<FromUserName value="asdfsaf" />
<FromUserType value="2" />
<ToUserID value="110" />
<Message value="asfddd" />
<MessgType value="2" />
<SendDataTime value="2011-07-13 03:31:22" />
</Message>
</DateTime>
<DateTime value="2011-08-05">
<Message>
<FromUserID value="110" />
<FromUserName value="110" />
<FromUserType value="1" />
<ToUserID value="1" />
<Message value="步步步步" />
<MessgType value="2" />
<SendDataTime value="2011-08-05 09:44:09" />
</Message>
<Message>
<FromUserID value="110" />
<FromUserName value="110" />
<FromUserType value="1" />
<ToUserID value="1" />
<Message value="123456789" />
<MessgType value="2" />
<SendDataTime value="2011-08-05 09:44:42" />
</Message>
</DateTime>
<DateTime value="2011-08-10">
<Message>
<FromUserID value="1" />
<FromUserName value="zuo" />
<FromUserType value="2" />
<ToUserID value="110" />
<Message value="hi" />
<MessgType value="2" />
<SendDataTime value="2011-08-10 09:32:24" />
</Message>
<Message>
<FromUserID value="110" />
<FromUserName value="110" />
<FromUserType value="1" />
<ToUserID value="1" />
<Message value="你好" />
<MessgType value="2" />
<SendDataTime value="2011-08-10 09:33:00" />
</Message>
</DateTime>
</Chats>


按DateTime节点,进行时间范围的查询
两天内的所有Message节点
一周内的所有Message节点
一月内的所有Message节点
....


XmlDocument doc = new XmlDocument();
doc.Load(path);
string strDate = DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd");
string strWhere = "/Chats/DateTime[@value > '" + strDate + "' and @value <= '" + DateTime.Now.ToString("yyyy-MM-dd") + "']";
XmlNodeList xnx = doc.SelectNodes(strWhere);
foreach (XmlNode partNode in xnx)
{
foreach (XmlNode xmlNode in partNode.ChildNodes)
{
//.......
}
}


以上代码经测试没有找到相应节点集,求高手解答,应如何编写查询条件?
...全文
467 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
我姓区不姓区 2011-08-11
  • 打赏
  • 举报
回复

XmlDocument doc = new XmlDocument();
doc.Load("E:\\test.xml");
foreach (XmlNode node in doc.SelectNodes("/Chats/DateTime"))
{
if ((DateTime.Today - DateTime.Parse(node.Attributes["value"].Value)).Days <= 2)
{
Console.WriteLine(node.InnerXml);
Console.WriteLine("---------------------");
}
}

anlaetion 2011-08-11
  • 打赏
  • 举报
回复
.net 2.0 表示压力很大....那几条语句是3.5以上的吧
anlaetion 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 herty 的回复:]
引用 9 楼 anlaetion 的回复:

引用 8 楼 lost_painting 的回复:
C# code

XDocument xdoc = XDocument.Load(@"D:\test.xml");
//两天内的所有Message节点
var r = from o in xdoc.Elements("Chats").Elements()
where Date……

……
[/Quote]
C# 有var 类型? 好吧,我又无知了,复制到项目里根本不能编译
herty 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 anlaetion 的回复:]

引用 8 楼 lost_painting 的回复:
C# code

XDocument xdoc = XDocument.Load(@"D:\test.xml");
//两天内的所有Message节点
var r = from o in xdoc.Elements("Chats").Elements()
where Date……


JAVA? 用C#怎么写?
[/Quote]

这个就是C#
anlaetion 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lost_painting 的回复:]
C# code

XDocument xdoc = XDocument.Load(@"D:\test.xml");
//两天内的所有Message节点
var r = from o in xdoc.Elements("Chats").Elements()
where Date……
[/Quote]

JAVA? 用C#怎么写?
鸭梨山大帝 2011-08-11
  • 打赏
  • 举报
回复

XDocument xdoc = XDocument.Load(@"D:\test.xml");
//两天内的所有Message节点
var r = from o in xdoc.Elements("Chats").Elements()
where DateTime.Now.Subtract(DateTime.Parse(o.Attribute("value").Value)).Days < 2
select o;

anlaetion 2011-08-11
  • 打赏
  • 举报
回复
没人回,什么情况?
anlaetion 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 solszl 的回复:]
linq to xml
[/Quote]

不用linq成不?
solszl 2011-08-11
  • 打赏
  • 举报
回复
linq to xml
anlaetion 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ningfeihu 的回复:]
好多 嘿嘿 帮顶哈
接分 新手楼猪多照顾下哈
[/Quote]

- - 好吧,帮顶有分什么的
anlaetion 2011-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lost_painting 的回复:]
限制必须使用XPATH吗?
[/Quote]

不用XPath,应如何处理
ningfeihu 2011-08-11
  • 打赏
  • 举报
回复
好多 嘿嘿 帮顶哈
接分 新手楼猪多照顾下哈
鸭梨山大帝 2011-08-11
  • 打赏
  • 举报
回复
限制必须使用XPATH吗?

110,556

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧