C# 从xml中删除重复日期

C# 从xml中删除重复日期,c#,xml,C#,Xml,我有一个xml文件,需要删除文件中日期重复的节点,然后按时间顺序对它们进行排序 <?xml version="1.0"?> <Incidents xmlns:xsi="http://www.w3.org/2001/Date="2014-01-07" Time="09:54:00" FileName="2014-01-07_Iceland_-_Harrow_Middlesex.xml"> <Incident> <Co

我有一个xml文件,需要删除文件中日期重复的节点,然后按时间顺序对它们进行排序

  <?xml version="1.0"?>
    <Incidents xmlns:xsi="http://www.w3.org/2001/Date="2014-01-07" Time="09:54:00" FileName="2014-01-07_Iceland_-_Harrow_Middlesex.xml">
      <Incident>
        <Contract>18</Contract>
        <SerialNo>0000000001</SerialNo>
        <EntryTime>2013-12-31T00:13:23</EntryTime>
        <ExitTime>2013-12-31T01:00:47</ExitTime>
       <Registration>LL5AVP</Registration>
        <Location>Middlesex</Location>
      <Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23
    Exit Date: Tuesday, 31 12 2013 on 01:00:47</Comment>
    </Incident>
    <Incident>
    <Contract>18</Contract>
    <SerialNo>0000000002</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
 <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
<Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23 Exit Date: Tuesday, 31 12 2013 on 01:00:47</Comment><Evidence></Incident><Incident>
<Contract>18</Contract>
<SerialNo>0000000004</SerialNo>
<EntryTime>2013-12-31T10:48:56</EntryTime>
<ExitTime>2013-12-31T12:12:02</ExitTime>
<Registration>LY02XR</Registration>
<Location>Iceland - Harrow Middlesex</Location>
<Comment>Entry Date: Tuesday, 31 12 2013 on 10:48:56
    Exit Date: Tuesday, 31 12 2013 on 12:12:02</Comment>
<FileDescription>Exit</FileDescription>
</Evidence><Diplomatic>0</Diplomatic>
</Incident>

使用LINQ到XML:

var doc = XDocument.Load(@"C:\Users\IT-Administrator\Desktop\2014-01-07_Middlesex.xml");
List<string> IncidentsSeen = new List<string>();

foreach (var item in doc.Element("Incidents").Elements("Incident"))
{
    var EntryDate = item.Element("Comment").Value;
    if (IncidentsSeen.Contains(EntryDate))
    {
        item.Remove();
    }
    else
    {
        IncidentsSeen.Add(EntryDate);
    }
}

doc.Save(@"C:\Users\IT-Administrator\Desktop\2014-01-07_Middlesex.xml");

请试试这个,我已经包含了一个示例XML,但是我没有包含名称空间

<?xml version="1.0" encoding="utf-8" ?>
<Incidents>
  <Incident>
    <Contract>18</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
  <Incident>
    <Contract>19</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
  <Incident>
    <Contract>20</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
  <Incident>
    <Contract>21</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
</Incidents>

根据你的意见

加载多个Xml文件,您可以将它们合并为一个

    var xml1 = XDocument.Load("file1.xml");
    var xml2 = XDocument.Load("file2.xml");

xml1.Descendants("Incident").LastOrDefault().AddAfterSelf(xml2.Descendants("Incident"‌​)); 
xml1.Save();
希望能有帮助-

更新根据您的评论,尝试从
RichTextBox
加载XML

 string test = richTextBox1.Text;
 TextReader tr = new StringReader(test);
 XDocument doc = XDocument.Load(tr);

您的xml无效(证据)。您必须以某种方式解析该日期。这是最大的障碍。你能确定日期格式吗?是的,那是我的问题。。日期格式为2013-12-31 T 11:21:27感谢lomed尝试了它,但没有显示任何错误,没有显示任何内容,但文件保持不变,因为它没有更改。我可以肯定地说它工作正常,但我有3行相同的数据它删除了第2个节点,但第3个节点仍然存在。。我不知道它在做什么..发布一个有效的xml。以及所需的输出xml。您能告诉我如何附加xml文件以便您了解它吗。@Preeth我只需复制粘贴您的xml,并在选择xml后使用
{}
将其显示为代码块。已解决。。谢谢大家。有没有办法在“从加载”按钮上载多个xml文件。@preethi上载多个xml文件?你的意思是选择多个XMl文件,对吗?我可以问你为什么需要这样做只是为了理解。我有多个XMl文件清楚地说,我有多个停车场位置,每个停车场位置都有相同的内容,有不同的车辆和不同的时间。@preethi那么你需要将多个文件保存到一个XMl中吗,如果是这样,请检查更新的答案。或者您可以创建一个函数,将多个xml文件合并为一个。嘿,苏拉杰,谢谢您的帮助。。您能告诉我如何使用c#中富文本框中的xml文件吗。请加急。。。。。。。
var doc = XDocument.Load(@"C:\Users\IT-Administrator\Desktop\2014-01-07_Middlesex.xml");

foreach (var itemsGroup in doc.Element("Incidents").Elements("Incident").GroupBy(x => x.Element("Comment").Value))
{
    foreach (var item in itemsGroup.Skip(1))
    {
        item.Remove();
    }
}

doc.Save(@"C:\Users\IT-Administrator\Desktop\2014-01-07_Middlesex.xml");
<?xml version="1.0" encoding="utf-8" ?>
<Incidents>
  <Incident>
    <Contract>18</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
  <Incident>
    <Contract>19</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
  <Incident>
    <Contract>20</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
  <Incident>
    <Contract>21</Contract>
    <SerialNo>0000000001</SerialNo>
    <EntryTime>2013-12-31T00:13:23</EntryTime>
    <ExitTime>2013-12-31T01:00:47</ExitTime>
    <Registration>LL5AVP</Registration>
    <Location>Middlesex</Location>
    <Comment>
      Entry Date: Tuesday, 31 12 2013 on 00:13:23
      Exit Date: Tuesday, 31 12 2013 on 01:00:47
    </Comment>
  </Incident>
</Incidents>
XDocument xdoc1 = XDocument.Load(@"D:\xxxx\Xxxxxxx\xxxx\TrialXML.xml");

xdoc1.Root.Elements("Incident") 
.OrderBy(d=>(Convert.ToDateTime(Convert.ToString(d.Element("EntryTime").Value)))) 
.GroupBy(s => (string)s.Element("Comment")) 
.SelectMany(g => g.Skip(1)) 
.Remove();

xdoc1.Save(@"D:\xxxx\Xxxxxxx\xxxx\TrialXML.xml");    
    var xml1 = XDocument.Load("file1.xml");
    var xml2 = XDocument.Load("file2.xml");

xml1.Descendants("Incident").LastOrDefault().AddAfterSelf(xml2.Descendants("Incident"‌​)); 
xml1.Save();
 string test = richTextBox1.Text;
 TextReader tr = new StringReader(test);
 XDocument doc = XDocument.Load(tr);