【问题标题】:xml and condition by dateTimexml 和 dateTime 条件
【发布时间】:2011-07-19 02:09:57
【问题描述】:

XML

<CalendarFairs> 
    <CalendarFair>
        <DateStart>2011-04-05T00:00:00</DateStart>
       <DateEnd>2011-04-09T00:00:00</DateEnd>
        <Title>aaaa</Title>   
       <IdExecutive>1</IdExecutive>
   </CalendarFair>
  <CalendarFair>
      <DateStart>2011-04-16T00:00:00</DateStart>
      <DateEnd>2011-04-19T00:00:00</DateEnd>
      <Title>bbb</Title>
      <IdExecutive>2</IdExecutive>
  </CalendarFair>
<CalendarFairs>

代码

  var elements = from element in doc.Descendants("CalendarFair")
                           where DateTime.Parse (element.Elements ("DateStart").ToString())==DateTime.Now 
                           select new
                           {
                               dateStart = element.Element("DateStart").Value,
                               dateEnd=element.Element("DateEnd").Value,
                               title=element.Element("Title").Value,
                               idExcutive = element.Element("IdExecutive").Value ,
                           };

foreach (var item in elements)//send this error

            {}
System.FormatException: The string was not recognized as a valid DateTime. There is a 
unknown word starting at index 0.

为什么会出错?

【问题讨论】:

    标签: asp.net xml linq xml-serialization linq-to-xml


    【解决方案1】:

    尝试如下更改:

    var elements = from element in doc.Descendants("CalendarFair")
                   let start = element.Element("DateStart").Value
                   where DateTime.Parse (start)==DateTime.Now.Date
                   select new
                   {
                       dateStart = start,
                       dateEnd=element.Element("DateEnd").Value,
                       title=element.Element("Title").Value,
                       idExcutive = element.Element("IdExecutive").Value ,
                   };
    

    编辑: 根据您发布的 XML,上面的查询效果很好。尝试使用此输入对其进行测试:

    <CalendarFairs> 
        <CalendarFair>
            <DateStart>2011-04-05T00:00:00</DateStart>
           <DateEnd>2011-04-09T00:00:00</DateEnd>
            <Title>aaaa</Title>   
           <IdExecutive>1</IdExecutive>
       </CalendarFair>
      <CalendarFair>
          <DateStart>2011-03-20T00:00:00</DateStart>
          <DateEnd>2011-04-19T00:00:00</DateEnd>
          <Title>bbb</Title>
          <IdExecutive>2</IdExecutive>
      </CalendarFair>
    </CalendarFairs>
    

    请注意,我已插入今天的开始日期。实际上我认为结果是空的,只是因为没有实际日期的条目。

    【讨论】:

    • 这会抛出异常吗?如果是,请尝试检查DateStart 元素是否存在于CalendarFair 中。否则与DateTime.Now.Date 进行比较,因为我刚刚在我的答案中进行了编辑。
    • DateStart 存在; dateTime.now.Date 也不起作用。其中 DateTime.Parse (start)==DateTime.Now.Date; start 没有属性值
    • 对不起,我听不懂你在说什么。无论如何,您的程序也以这种方式不起作用,这似乎很奇怪。您能否在您的原始帖子中插入您正在使用的 XML?
    • 我认为问题在于start是一个字符串,所以该行应该是:where DateTime.Parse (start)==DateTime.Now.Date
    • 您在使用 ASP.NET 吗?你服务器上的日期是什么时候?
    【解决方案2】:

    听起来您输入的一个或多个&lt;DateStart&gt; 字符串不是有效的DateTime 格式。

    您能发布一些示例输入 XML 吗?

    您可能需要使用 ParseExact 提供日期格式 - http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

    【讨论】:

      猜你喜欢
      • 2021-12-12
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-18
      • 2015-06-05
      • 1970-01-01
      • 2023-01-20
      相关资源
      最近更新 更多