從XML

2014-01-07 14 views
1

刪除重複的日期我有一個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> 
     <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> 

我有3起事故,其中2條評論有相同的時間<Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23我需要刪除其中的一個我是新來的XML和嘗試這個,但不是成功。

private void button2_Click(object sender, EventArgs e) 
     { 
    XmlDocument xdoc1 = new XmlDocument(); 
       xdoc1.Load("C:\\Users\\IT-Administrator\\Desktop\\2014-01-07_Middlesex.xml"); 
       XmlNodeList Incidents = xdoc1.SelectNodes("//Incidents"); 
       List<string> IncidentsSeen = new List<string>(); 


       foreach (XmlNode comments in Incidents) 
       { 
        string EntryDate = Incidents.Attributes["Comments"].value; 
         if(IncidentsSeen.Contains(EntryDate)) 
          Incidents.ParentNode.RemoveChild(Incidents); 
         else 
          IncidentsSeen.Add(EntryDate); 
       } 
       Console.ReadKey(true); 
      } 
       } 
       xdoc1.Save("X:\\Processed\\2013-07-06_Iceland_-_Spennymoorduplicate.xml"); 
      } 

這裏是我FUL MXL CODE ::::

<?xml version="1.0"?> 
<Incidents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Count="34" Date="2014-01-07" Time="09:54:00" FileName="2014-01-07_Middlesex..xml"> 
    <Incident> 
    <Contract>18</Contract> 
    <SerialNo>0000000001</SerialNo> 
    <EntryTime>2013-12-31T00:13:23</EntryTime> 
    <ExitTime>2013-12-31T01:00:47</ExitTime> 
    <OffenceCode>94</OffenceCode> 
    <Operator>P+D</Operator> 
    <Registration>LS5VP</Registration> 
    <Location> Middlesex</Location> 
    <Make>N/A</Make> 
    <Model>N/A</Model> 
    <Colour>N/A</Colour> 
    <Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23 
Exit Date: Tuesday, 31 12 2013 on 01:00:47</Comment> 
    <Nationality>-1</Nationality> 
    <Foreign>-1</Foreign> 
    <Evidence> 
     <FileName>entry_143_LS5VP_2014-01-07_09-54-00.jpg</FileName> 
     <FileDescription>Entry</FileDescription> 
    </Evidence> 
    <Evidence> 
     <FileName>exit_143_LS5VP_2014-01-07_09-54-00.jpg</FileName> 
     <FileDescription>Exit</FileDescription> 
    </Evidence> 
    <Diplomatic>0</Diplomatic> 
    </Incident> 
<Incident><Contract>18</Contract><SerialNo>0000000002</SerialNo><EntryTime>2013-12-31T00:13:23</EntryTime><ExitTime>2013-12-31T01:00:47</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>LS5VP</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23 
Exit Date: Tuesday, 31 12 2013 on 01:00:47</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_LS5VP_2014-01-07_09-55-30.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_LS5VP_2014-01-07_09-55-30.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000003</SerialNo><EntryTime>2013-12-31T00:13:23</EntryTime><ExitTime>2013-12-31T01:00:47</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>LS5VP</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23 
Exit Date: Tuesday, 31 12 2013 on 01:00:47</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_LS5VP_2014-01-07_09-56-33.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_LS5VP_2014-01-07_09-56-33.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000004</SerialNo><EntryTime>2013-12-31T10:48:56</EntryTime><ExitTime>2013-12-31T12:12:02</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>LY0XR</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 10:48:56 
Exit Date: Tuesday, 31 12 2013 on 12:12:02</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_LY0XR_2014-01-07_09-57-22.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_LY0XR_2014-01-07_09-57-22.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000032</SerialNo><EntryTime>2013-12-31T19:11:34</EntryTime><ExitTime>2013-12-31T19:36:17</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>AK1DX</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 19:11:34 
Exit Date: Tuesday, 31 12 2013 on 19:36:17</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_AK1DX_2014-01-07_10-32-40.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_AK1DX_2014-01-07_10-32-40.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000033</SerialNo><EntryTime>2013-12-31T19:11:34</EntryTime><ExitTime>2013-12-31T19:36:17</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>AK1DX</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 19:11:34 
Exit Date: Tuesday, 31 12 2013 on 19:36:17</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_AK1DX_2014-01-07_10-33-29.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_AK1DX_2014-01-07_10-33-29.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000034</SerialNo><EntryTime>2013-12-31T20:22:33</EntryTime><ExitTime>2013-12-31T22:57:48</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>MK0HL</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 20:22:33 
Exit Date: Tuesday, 31 12 2013 on 22:57:48</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_MK0HL_2014-01-07_10-34-19.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_MK0HL_2014-01-07_10-34-19.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident></Incidents> 
Desired OUTPUT::: 


    <?xml version="1.0"?> 
<Incidents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Count="34" Date="2014-01-07" Time="09:54:00" FileName="2014-01-07_Middlesex..xml"> 
    <Incident> 
    <Contract>18</Contract> 
    <SerialNo>0000000001</SerialNo> 
    <EntryTime>2013-12-31T00:13:23</EntryTime> 
    <ExitTime>2013-12-31T01:00:47</ExitTime> 
    <OffenceCode>94</OffenceCode> 
    <Operator>P+D</Operator> 
    <Registration>LS5VP</Registration> 
    <Location> Middlesex</Location> 
    <Make>N/A</Make> 
    <Model>N/A</Model> 
    <Colour>N/A</Colour> 
    <Comment>Entry Date: Tuesday, 31 12 2013 on 00:13:23 
Exit Date: Tuesday, 31 12 2013 on 01:00:47</Comment> 
    <Nationality>-1</Nationality> 
    <Foreign>-1</Foreign> 
    <Evidence> 
     <FileName>entry_143_LS5VP_2014-01-07_09-54-00.jpg</FileName> 
     <FileDescription>Entry</FileDescription> 
    </Evidence> 
    <Evidence> 
     <FileName>exit_143_LS5VP_2014-01-07_09-54-00.jpg</FileName> 
     <FileDescription>Exit</FileDescription> 
    </Evidence> 
    <Diplomatic>0</Diplomatic> 
    </Incident> 
<Incident><Contract>18</Contract><SerialNo>0000000004</SerialNo><EntryTime>2013-12-31T10:48:56</EntryTime><ExitTime>2013-12-31T12:12:02</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>LY0XR</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 10:48:56 
Exit Date: Tuesday, 31 12 2013 on 12:12:02</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_LY0XR_2014-01-07_09-57-22.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_LY0XR_2014-01-07_09-57-22.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000032</SerialNo><EntryTime>2013-12-31T19:11:34</EntryTime><ExitTime>2013-12-31T19:36:17</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>AK1DX</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 19:11:34 
Exit Date: Tuesday, 31 12 2013 on 19:36:17</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_AK1DX_2014-01-07_10-32-40.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_AK1DX_2014-01-07_10-32-40.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000033</SerialNo><EntryTime>2013-12-31T19:11:34</EntryTime><ExitTime>2013-12-31T19:36:17</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>AK1DX</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 19:11:34 
Exit Date: Tuesday, 31 12 2013 on 19:36:17</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_AK1DX_2014-01-07_10-33-29.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_AK1DX_2014-01-07_10-33-29.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident><Incident><Contract>18</Contract><SerialNo>0000000034</SerialNo><EntryTime>2013-12-31T20:22:33</EntryTime><ExitTime>2013-12-31T22:57:48</ExitTime><OffenceCode>94</OffenceCode><Operator>P+D</Operator><Registration>MK0HL</Registration><Location> Middlesex</Location><Make>N/A</Make><Model>N/A</Model><Colour>N/A</Colour><Comment>Entry Date: Tuesday, 31 12 2013 on 20:22:33 
Exit Date: Tuesday, 31 12 2013 on 22:57:48</Comment><Nationality>-1</Nationality><Foreign>-1</Foreign><Evidence><FileName>entry_143_MK0HL_2014-01-07_10-34-19.jpg</FileName><FileDescription>Entry</FileDescription></Evidence><Evidence><FileName>exit_143_MK0HL_2014-01-07_10-34-19.jpg</FileName><FileDescription>Exit</FileDescription></Evidence><Diplomatic>0</Diplomatic></Incident></Incidents> 

這裏是我的代碼:

private void button1_Click(object sender, EventArgs e) // open file dialog works fine 
     { 

      Stream myStream; 

      OpenFileDialog openFileDialog1 = new OpenFileDialog(); 

      openFileDialog1.Filter = "XML files(.xml)|*.xml|all Files(*.*)|*.*"; 
      openFileDialog1.FilterIndex = 1; 

      openFileDialog1.Multiselect = true; 

      if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
      { 
       if ((myStream = openFileDialog1.OpenFile()) != null) 
       { 
        string strfilename = openFileDialog1.FileName; 
        string filetext = File.ReadAllText(strfilename); 
        richTextBox1.Text = filetext; 
        MessageBox.Show(strfilename); 
       } 


      } 
     } 


     private void button2_Click(object sender, EventArgs e)//Deleting duplicate data 
     { 
      string test = richTextBox1.Text; 
      TextReader tr = new StringReader(test); 
      XDocument doc = XDocument.Load(tr); 
      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"); 

      //doc.Save(@"C:\Users\IT-Administrator\Desktop\22.xml"); 
     } 



     private void button3_Click(object sender, EventArgs e)//saving.. 
     { 

      //doc.Save(@"C:\Users\IT-Administrator\Desktop\22.xml"); 
      SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
      saveFileDialog1.Filter = "XML files(.xml)|*.xml|all Files(*.*)|*.*"; 
      if (saveFileDialog1.ShowDialog() == DialogResult.OK) 
      { 
       using (Stream s = File.Open(saveFileDialog1.FileName, FileMode.CreateNew)) 
       using (StreamWriter sw = new StreamWriter(s)) 
       { 
        sw.Write(richTextBox1.Text); 
       } 
      } 



     } 
+0

您的xml無效(證據)。 – dovid

+0

你將不得不以某種方式解析這個日期。這是最大的障礙。你能確定日期格式嗎? – Gusdor

+0

是的,這是我的問題..日期格式是2013-12-31 T 11:21:27 – preethi

回答

2

請試試這個我已經包括示例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");  

按你的意見

加載多個XML文件,並可以將它們合併成一個。

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

xml1.Descendants("Incident").LastOrDefault().AddAfterSelf(xml2.Descendants("Incident"‌​)); 
xml1.Save(); 

希望它能幫助 - Reference

UPDATE根據您的意見,試試這個從RichTextBox加載XML。

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

解決了..謝謝guys..is有任何方式來從加載按鈕上載多個XML文件。 – preethi

+0

@preethi上傳多個xml文件?你的意思是選擇多個XMl文件嗎?我可以問你爲什麼只是爲了理解。 –

+0

我有多個xml文件,清楚地說,我有多個停車場位置,每個停車場位置都與不同的車輛和theri時間相同的強大功能。 – preethi

1

使用LINQ to 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"); 

注意: EntryDate是不是日期時間

編輯

在文件只是不同的元素:

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"); 
+0

謝謝lomed試了一下,但沒有顯示沒有錯誤,但文件仍然保持,因爲它沒有改變。 – preethi

+0

使用Save方法。我編輯了答案。 – dovid

+0

我可以肯定地說它的工作,但我有3行相同的數據,它刪除了第二節點,但第三節點仍然存在..我不知道它是否在做... – preethi