[XML] Вывод результатов поиска. Подскажите ошибку - C#
Формулировка задачи:
Искать можно по тексту и по типу (входящие-исходящие-все).
Проблема в том, что вместо такого результата:
Получается уж слишком дофига стрелок:
Структура XML-файла:
P.S. Стрелки показывают, было ли сообщение отправлено, или, напротив, получено.
{
txtHistory.Clear();
listView1.Clear();
string patch = @"C:/History/ExampleHistory.xml";
XElement history;
try
{
history = XElement.Load(patch);
}
catch(FileNotFoundException ex)
{
MessageBox.Show(ex.Message, "Error!");
this.Close();
return;
}
XElement[] elements = history.Elements("Message").ToArray();
switch (cmbTypeOfSearch.SelectedIndex)
{
case 0:
{
var filtred = from el in elements
where el.Element("message").Value.ToLower().Contains(txtSearch.Text.ToLower())
select el;
foreach (var el in filtred)
{
foreach (XElement msg in el.Elements())
{
string res = string.Format("{0}",
msg.Value);
txtHistory.AppendText(res + Environment.NewLine);
listView1.Items.Add(res);
}
}
break;
}
case 1:
{
var filtredbytype = from el in elements
where el.Attribute("msgType").Value == "from"
select el;
var filtred = from el in filtredbytype
where el.Element("message").Value.ToLower().Contains(txtSearch.Text.ToLower())
select el;
foreach (var el in filtred)
{
foreach (XElement msg in el.Elements())
{
string res = string.Format("<- {0}",
msg.Value);
txtHistory.AppendText(res + Environment.NewLine);
listView1.Items.Add(res);
}
}
break;
}
case 2:
{
var filtredbytype = from el in elements
where el.Attribute("msgType").Value == "to"
select el;
var filtred = from el in filtredbytype
where el.Element("message").Value.ToLower().Contains(txtSearch.Text.ToLower())
select el;
foreach (var el in filtred)
{
foreach (XElement msg in el.Elements())
{
string res = string.Format("-> {0}",
msg.Value);
txtHistory.AppendText(res + Environment.NewLine);
listView1.Items.Add(res);
}
}
break;
}
}
}
-> Example
17.05.2015 6:42:14
TEST REST PEACE
-> Example
-> 17.05.2015 6:42:14
-> TEST REST PEACE
<?xml version="1.0" encoding="utf-8"?>
<Messages>
<Message msgType="to">
<usrSecond>Example</usrSecond>
<date>17.05.2015 5:42:14</date>
<message>test message</message>
</Message>
<Message msgType="to">
<usrSecond>Example</usrSecond>
<date>17.05.2015 6:42:14</date>
<message>TEST REST PEACE</message>
</Message>
</Messages>
Решение задачи: «[XML] Вывод результатов поиска. Подскажите ошибку»
textual
Листинг программы
foreach (var el in filtred)
{
bool first = true;
foreach (XElement msg in el.Elements())
{
string res = msg.Value;
if (first) {
res = string.Format("-> {0}", msg.Value);
first = false;
}
txtHistory.AppendText(res + Environment.NewLine);
listView1.Items.Add(res);
}
}