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

.Net技术 码拜 6年前 (2015-05-10) 319次浏览 0个评论
 
<?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)
     {
             //.......
     }
}

以上代码经测试没有找到相应节点集,求高手解答,应如何编写查询条件?

2分
限制必须使用XPATH吗?
2分
好多 嘿嘿  帮顶哈
接分  新手楼猪多照顾下哈
引用 1 楼 lost_painting 的回复:

限制必须使用XPATH吗?

不用XPath,应如何处理

引用 2 楼 ningfeihu 的回复:

好多 嘿嘿 帮顶哈
接分 新手楼猪多照顾下哈

– – 好吧,帮顶有分什么的

2分
linq to xml
引用 5 楼 solszl 的回复:

linq to xml

不用linq成不?

没人回,什么情况?
20分
            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;

引用 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#怎么写?

4分
引用 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#怎么写?

这个就是C#

引用 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……

……

C# 有var 类型? 好吧,我又无知了,复制到项目里根本不能编译

.net 2.0 表示压力很大….那几条语句是3.5以上的吧
70分
            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("---------------------");
                }
            }


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#如何按属性查询XML(使用XPath)
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!