📄 Что такое XML и HTML?
XML — формат для хранения данных. HTML — язык для создания веб-страниц.
📦 XML (данные)
<books>
<book id="1">
<title>Основы WPF</title>
<author>Иванов И.И.</author>
</book>
</books>
🌐 HTML (страница)
<div class="product">
<h2>Основы WPF</h2>
<span class="price">500₽</span>
</div>
🧠 XML и HTML очень похожи. XPath работает с обоими!
🔍 Что такое XPath?
XPath — это язык, который помогает находить данные в XML и HTML.
- X = XML / HTML
- Path = путь
- Это как навигатор: говоришь «найди заголовок товара» — и он находит.
💡 XPath не меняет данные — он только ищет.
🔧 Как подключить XPath в C#
using System.Xml; // для работы с XML
using System.Xml.XPath; // для XPathNavigator
✅ Это как включить инструменты перед работой.
📋 Главные XPath-команды
/ — корень (самый верх)
// — искать везде
@ — атрибут (то, что в кавычках)
[ ] — условие (как в жизни: «книга, у которой id=1»)
. — текущее место
.. — родитель (на один уровень выше)
* — любой элемент
text() — текст внутри тега
📌 Запомните: // — это «найти всё, где бы ни было».
🧪 Примеры XPath для XML
/books/book/title — все названия книг
//book[@id='1'] — книга с id=1
//book[price>400] — дорогие книги
//author/text() — имена авторов
📂 Это для работы с файлами .xml.
🌐 Примеры XPath для HTML
XPath отлично работает на веб-страницах. Это используют все парсеры.
//h1 — найти все заголовки страницы
//div[@class="product"]/h2 — найти названия товаров
//a[@href] — найти все ссылки
//img[@alt="logo"] — найти логотип по alt
//span[@class="price"]/text() — цены товаров
💻 Это используют в Selenium, Playwright, парсинге.
📂 Как загрузить XML в C#
// 1. Из файла
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
// 2. Из строки (прямо в коде)
string xml = "<books><book><title>WPF</title></book></books>";
doc.LoadXml(xml);
📎 Load() — для файла, LoadXml() — для текста.
🌐 Как загрузить HTML в C#
HTML загружают через HttpClient или HtmlAgilityPack.
// Пример с HtmlAgilityPack (установите через NuGet)
using HtmlAgilityPack;
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://gadget59.ru");
// Теперь можно использовать XPath
var titles = doc.DocumentNode.SelectNodes("//h1");
📦 HtmlAgilityPack — это популярная библиотека для парсинга HTML.
🎯 Первый запрос: все заголовки
XmlDocument doc = new XmlDocument();
doc.Load("books.xml");
// Выбираем все теги title
XmlNodeList titles = doc.SelectNodes("//title");
foreach (XmlNode node in titles)
{
Console.WriteLine(node.InnerText);
}
📝 SelectNodes возвращает список всех найденных узлов.
🎯 Второй запрос: один элемент
XmlNode book = doc.SelectSingleNode("//book[@id='1']");
if (book != null)
{
Console.WriteLine("Найдена книга: " + book["title"].InnerText);
}
else
{
Console.WriteLine("Книга не найдена.");
}
🧐 SelectSingleNode возвращает только первый подходящий узел.
⚖️ Условия в XPath
Можно выбирать по цене, классу, атрибуту.
// XML: книги дороже 400
XmlNodeList expensive = doc.SelectNodes("//book[price>400]");
// HTML: товары с классом "sale"
var saleItems = htmlDoc.SelectNodes("//div[@class='sale']");
⚡ Условия ставятся в квадратные скобки [ ].
🚀 XPathNavigator — быстрый поиск
XPathNavigator работает быстрее, когда данных много.
XPathDocument doc = new XPathDocument("books.xml");
XPathNavigator nav = doc.CreateNavigator();
// Поиск
XPathNodeIterator iterator = nav.Select("//book[price>400]");
while (iterator.MoveNext())
{
Console.WriteLine(iterator.Current.SelectSingleNode("title").Value);
}
⚡ Для маленьких XML можно использовать XmlDocument.
🔍 XPath в браузере
В браузере можно прямо на странице проверить XPath.
- Нажми F12 → открой Console.
- Введи:
$x("//h1") — получишь все заголовки.
- Введи:
$x("//a[@href]") — все ссылки.
🌐 Это помогает быстро проверить запрос перед написанием кода.
🎯 Практическое задание
Дан XML со студентами:
<students>
<student id="1"><name>Иван</name><grade>5</grade></student>
<student id="2"><name>Анна</name><grade>4</grade></student>
<student id="3"><name>Максим</name><grade>3</grade></student>
</students>
- Вывести имена всех студентов.
- Найти студента с id=2 и вывести его имя.
- Найти всех студентов с оценкой 5.
💡 Используйте SelectNodes и SelectSingleNode.
✅ Итоги
- XPath работает с XML и HTML.
- Для XML используйте
XmlDocument.
- Для HTML используйте
HtmlAgilityPack или Selenium.
SelectNodes — список, SelectSingleNode — один элемент.
- Условия пишутся в
[ ], атрибуты — с @.
- XPath можно проверять прямо в браузере через
$x().
🎉 Теперь вы умеете искать данные в XML и на сайтах!