В настоящее время я пытаюсь реализовать функцию поиска в небольшом проекте, который у меня есть. Небольшая предыстория о проекте, у меня есть XML, откуда я импортирую некоторые данные, хранящиеся в древовидной структуре. Моя цель - уметьчтобы дать строку и отобразить в виде дерева только те узлы, которые содержат эту конкретную строку.
Для приведенного ниже XML-кода мое древовидное представление выглядит следующим образом
Breakfast
Belgian waffles
Strawberry Belgian Waffles
Если я выберу узел, у меня будетгрупповое поле с некоторыми текстовыми полями, которое содержит свойства каждого элемента (цена, калорийность и т. д.)
Я хочу, чтобы моя функция могла искать что-либо ... то есть, если я даю цену, отображать элемент/ items в древовидной структуре с этой ценой, если я ищу вафли, чтобы отобразить все вафли.
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>
Two of our famous Belgian Waffles with plenty of real maple syrup
</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>
Light Belgian waffles covered with strawberries and whipped cream
</description>
<calories>900</calories>
</food>
</breakfast_menu>
У меня есть рекурсивная функция, но в 3-й строке (TreeNode t = treeNode.FirstNode) она выскакиваетисключение нулевой ссылки. Я предполагаю, что это исключение появляется, когда оно попадает на узел без дочерних элементов, но я не знаю, как его обработать.
private void IterateRecursive(TreeNode treeNode)
{
TreeNode t = treeNode.FirstNode;
if (t!=null)
{
foreach (TreeNode tn in treeNode.Nodes)
{
IterateRecursive(tn);
}
}
if (!treeNode.Text.Contains(textBox_search_string.ToString()))
{
treeView1.Nodes.Remove(treeNode);
}
}
Кроме того, если есть разницаЯ могу сделать эту функцию поиска доступной для предложений.