私はxmlファイルc#の初心者です。XMLから重複を削除し、コンボボックスで選択したアイテムを使用してプロセスを選択することにより、日付ごとに最新のもののみを保持しようとしています。
*The XML structure is:
<Trace>
<Log>
<Process>NPP</Process>
<LineNo>14</LineNo>
<Date>12/3/2019 5:47:53 PM</Date>
<Result>Passed</Result>
</Log>
<Log>
<Process>WET</Process>
<LineNo>14</LineNo>
<Date>12/3/2019 5:50:54 PM</Date>
<Result>Passed</Result>
</Log>
<Log>
<Process>CPL</Process>
<LineNo>14</LineNo>
<Date>19/3/2019 5:14:07 AM</Date>
<Result>Re-input</Result>
</Log>
<Log>
<Process>CPL</Process>
<LineNo>14</LineNo>
<Date>19/3/2019 5:17:40 AM</Date>
<Result>Re-input</Result>
</Log>
<Log>
<Process>CPL</Process>
<LineNo>14</LineNo>
<Date>19/3/2019 6:27:43 AM</Date>
<Result>Re-input</Result>
</Log>
</Trace>
プロセス「CPL」を選択した場合でも、データには3つの結果が表示されます。私が試したこと。*コードは次のとおりです。
var xdoc1 = XDocument.Load(@"D:\DataDirectory\DataDirectory145\Product\149329.xml");
var NewDoc1 = new XDocument(new XElement("Trace",from anEntry in xdoc1.Element("Trace").Elements("Log")
where anEntry.Element("Process").Value.Contains(cmbProcess.SelectedItem.ToString())
orderby anEntry.Element("Date").Value.ToString().First()
select anEntry)
);
var myList = (from bEntry in NewDoc.Descendants("SerialNo")
from bEntry1 in NewDoc1.Descendants("Log")
select new
{
Product_Serial_No = Path.GetFileNameWithoutExtension(bEntry.Element("Product").Value),
PWB_Serial_No = Path.GetFileNameWithoutExtension(bEntry.Element("PWB").Value),
Process = bEntry1.Element("Process").Value,
Line_No = bEntry1.Element("LineNo").Value,
Date = bEntry1.Element("Date").Value,
Result = bEntry1.Element("Result").Value
}
).ToList();
*出力には次のような最新の日付が表示されると思います。
| 149329 .. | 149329 .. | CPL | 14 | 2019/3/19 6:27:43 AM | 再入力|
エレメント日付の値でログディセンダントを(降順で)並べ替えて、最初のアイテムを選択できます。
例えば
var result = xDoc.Descendants("Log")
.OrderByDescending(x=> DateTime.Parse(x.Element("Date").Value))
.Select(x=>
new
{
Process = (string)x.Element("Process").Value,
Line = (string)x.Element("LineNo").Value,
Date = DateTime.Parse(x.Element("Date").Value),
Result = (string)x.Element("Result").Value
})
.First();
サンプル出力
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加