xml内容:  <?xml version="1.0" encoding="utf-8" ?> 
  <xml>
  <rows>
     <row date="2011-09-15" num="1" /> 
     <row date="2011-09-16" num="2" /> 
     <row date="2011-09-17" num="3" /> 
     <row date="2011-09-18" num="4" /> 
     <row date="2011-09-19" num="5" /> 
     <row date="2011-09-20" num="6" /> 
  </rows>
  </xml>
读取xml中大于当前日期的内容:            XmlDocument xml = new XmlDocument();
            xml.Load("D:\\1.xml");
            String s = String.Format("xml/rows/row[@date>'{0}']", DateTime.Now.ToString("yyyy-MM-dd"));
            XmlNodeList nodes = xml.SelectNodes(s);
            Console.WriteLine(nodes.Count);
问题是:
1.当条件是[@date>'{0}']的时候,为什么查不到结果?
2.当条件是[@num>'{0}']的时候,可以查出结果;查询条件是日期和非日期时的写法有什么区别吗?

解决方案 »

  1.   

    这样写吗?也不对String s = String.Format("xml/rows/row[@date>'{0}']", DateTime.Now;
      

  2.   

    用强类型的string xmlSource = @"<?xml version=""1.0"" encoding=""utf-8"" ?> 
                      <xml>
                      <rows>
                         <row date=""2011-09-15"" num=""1"" /> 
                         <row date=""2011-09-16"" num=""2"" /> 
                         <row date=""2011-09-17"" num=""3"" /> 
                         <row date=""2011-09-18"" num=""4"" /> 
                         <row date=""2011-09-19"" num=""5"" /> 
                         <row date=""2011-09-20"" num=""6"" /> 
                      </rows>
                      </xml>";
                XDocument xDoc = XDocument.Parse(xmlSource);
                var result = xDoc.Descendants("row").Where(xe => DateTime.Parse(xe.Attribute("date").Value) > DateTime.Now);
                result.ToList().ForEach(xe => Response.Write(xe.Attribute("date").Value + " "));/*
    2011-09-17 2011-09-18 2011-09-19 2011-09-20
    */     
      

  3.   

    using System.Linq;
    using System.Xml.Linq;
      

  4.   

    这样也可以var result = xDoc.Descendants("row").Where(xe => xe.Attribute("date").Value.CompareTo(DateTime.Now.ToString("yyyy-MM-dd")) > 0);
    //LZ的方法
                XmlDocument xml = new XmlDocument();
                xml.Load("D:\\1.xml");
                IEnumerable<XmlNode> nodes = xml.SelectNodes("xml/rows/row")
                    .Cast<XmlNode>()
                    .Where(node => node.Attributes["date"].Value.CompareTo(DateTime.Now.ToString("yyyy-MM-dd")) > 0);            
                Console.WriteLine(nodes.Count);C#并没有提供string类型的> <运算符,你需要自己重载
      

  5.   

    谢谢LS,不知道vs2005有没有简单的方法
    我是这样写的,但是感觉不太简洁            XmlDocument xml = new XmlDocument();
                xml.Load("D:\\1.xml");
                //String s = string.Format("xml/rows/row[@date>'{0}']", DateTime.Now);
                List<XmlNode> list = new List<XmlNode>();
                XmlNodeList nodes = xml.SelectNodes("xml/rows/row");
                foreach (XmlNode node in nodes)
                {
                    if (DateTime.Compare(Convert.ToDateTime(node.Attributes["date"].Value), Convert.ToDateTime( DateTime.Now.ToString("yyyy-MM-dd")))>0)
                    {
                        list.Add(node);
                    }
                }
                foreach (XmlNode node in list)
                {
                    Console.WriteLine(node.Attributes["date"].Value);
                }
      

  6.   

    建议用linq to xml ,那里可以使用数据转换,将字符串换成日期进行对比选择
      

  7.   


                FileStream fs = new FileStream(@"E:\1.xml", FileMode.Open, FileAccess.Read);
                DataSet ds = new DataSet();
                ds.ReadXml(fs);
                DataRow[] row = ds.Tables["row"].Select("date>'" + DateTime.Now.ToString("yyyy-MM-dd") + "'");
                foreach (DataRow r in row)
                    Console.WriteLine(r["date"]);
                fs.Close();
                fs.Dispose();
      

  8.   

    IEnumerable<XmlNode> nodes = xml.SelectNodes("xml/rows/row")
                    .Cast<XmlNode>()
                    .Where(node => node.Attributes["date"].Value.CompareTo(DateTime.Now.ToString("yyyy-MM-dd")) > 0); 2005
    把上面两个换成foeach(XmlNode node in xml.SelectNodes("xml/rows/row"))
        if(node.Attributes["date"].Value.CompareTo(DateTime.Now.ToString("yyyy-MM-dd")) > 0)
            nodeList.Add(node);         
      

  9.   

    看来csdn上的高手就是多啊,我顺便问一下各位啊,在xml中怎么实现自增长呢,像sql中的identity一样