根据时间戳C#

时间:2016-09-15 09:57:41

标签: c# xml linq timestamp

我需要有关如何根据时间戳“自动”删除节点的帮助。用户在xml文档中定义特定日期,例如17/9/2006 有人可以给我一个例子吗? 提前谢谢!

   <root>
    <element>
    </element>
    <timestamp time="2016-09-16T13:45:30">
    </timestamp>
    <--how do I delete element based on the given timestamp?-->
    </root>

  //UNTESTED CODE

     XDocument doc = XDocument.Load("time.xml");
     var name = doc.Descendants("root")
        .Where(n => n.Attribute("time").Value == "2016-09-16T13:45:30")
        .Select(n => (string)n) 
        .First(); 
      <--how can I delete it based on timestamp-->
         name.Element("element").Remove();

2 个答案:

答案 0 :(得分:4)

解析ISO 8601日期/时间格式:

string input = "2016-09-16T13:45:30";
DateTime converted = DateTime.Parse(input, null, DateTimeStyles.RoundtripKind);

将日期转换为DateTime类型后,您可以使用它来标识要删除的节点(强烈建议使用LinQ)。

答案 1 :(得分:2)

假设您想要与DateTime变量inputDate进行比较。

// I have formatted yor XML and structured it. "root" is the the parent node. Elements are the child elements of root consisting of timestamp tag.

 string xmlInput =  @"
 <root>
 <element>
 <timestamp time='2016-09-16T13:45:30'>
 </timestamp>
 </element>
 <element>
 <timestamp time='2016-10-16T13:45:30'>
 </timestamp>
 </element>
 </root>";

    XDocument  xdoc = XDocument.Parse(xmlInput);
    xdoc.Descendants("root").Elements("element").
                             Where(x => DateTime.Compare(DateTime.Parse(x.Element("timestamp").Attribute("time").Value,null, DateTimeStyles.RoundtripKind).Date, inputDate.Date) ==0).
                             ToList().ForEach(x => x.Remove());

我已将每个元素的xml日期timestampinputdate进行比较,以确定日期与时间的相等性。你可以有任何你想要的条件。

注意:您需要使用System.Globalization;

进行引用
using System.Globalization;
using System.Xml.Linq;
using System.Xml;
using System.Linq;