Как найти xml элемент по его атрибуту?
Из этой статьи Вы узнаете, как найти xml элемент по его атрибуту с помощью простого LINQ запроса. И так для начала создадим Windows Forms приложение и поместим на форму: два элемента управления textBox (txtAtrName и txtAtrValue), кнопку и один listBox. Затем добавим в наш проект xml файл, который содержит следующую структуру:
<root> <user id="1" age="20" name="Vasya"/> <user id="2" age="25" name="Ola"/> <user id="3" age="30" name="Petya"/> <user id="4" age="25" name="Vasya"/> </root>
Задача: найти все xml элементы, которые содержат атрибут «age» со значением 25. Надеюсь, Вы уже знаете, что такое XML и как с ним работать, поэтому сразу же переходим к решению задачи.
исходный код
using System.Xml.Linq; //добавить try { XDocument xDoc = XDocument.Load("My.xml"); var elements = from elmts in xDoc.Descendants() where elmts.Attribute(txtAtrName.Text).Value == txtAtrValue.Text select elmts; foreach (var element in elements) { listBox1.Items.Add(element); } } catch (Exception ex) { MessageBox.Show(ex.Message); }
Результат
Всё работает, но если Вы сейчас попытаетесь найти XML элемент, у которого атрибут «age» не существует, то в результате Вы получите исключение. Например, не много изменим XML файл и удалим у четвертого элемента атрибут «age».
<root> ... <user id="4" name="Vasya"/> </root>
Выполним выше указанный код, в результате получаем исключение NullReferenceException.
Чтобы этого избежать нужно, добавить в Linq запрос проверку на null. То есть сначала мы должны убедиться, что XML атрибут существует, а только потом получить его значение.
var elements = from elmts in xDoc.Descendants() where elmts.Attribute(txtAtrName.Text) != null && elmts.Attribute(txtAtrName.Text).Value == txtAtrValue.Text select elmts;
Теперь всё в порядке.
Читайте также:
Привет. А как найденное вывести в dataGridView1 (я ее уже создал)?
Два варианта:
1) вручную создать столбцы
2) автоматически создать столбцы
Привет. Любой из этих вариантов.