Codeby web-security - новый курс от Codeby Security School

Представляем вашему вниманию новый курс от команды The Codeby - "Тестирование Веб-Приложений на проникновение с нуля". Общая теория, подготовка рабочего окружения, пассивный фаззинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...


Как найти 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>

Windows forms приложение

Задача: найти все xml элементы, которые содержат атрибут &#171;age&#187; со значением 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);
}

Результат


Paranoid - курс от Codeby Security School

Представляем вашему вниманию курс от команды codeby - "Комплекс мер по защите персональных данных, анонимности в интернете и не только" Подробнее ...


найденные xml элементы

Всё работает, но если Вы сейчас попытаетесь найти XML элемент, у которого атрибут &#171;age&#187; не существует, то в результате Вы получите исключение. Например, не много изменим XML файл и удалим у четвертого элемента атрибут &#171;age&#187;.

<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;

Теперь всё в порядке.

Читайте также:


Codeby Market от Сodeby

Мы запустили свой магазин CodebyMarket Equipment for InfoSec. Уже добавили RaspberryAlfa Long-RangeOrange PiArduino и многое другое. Купить Pentesting Devices