🧩 XPath в C# XML + HTML

15 слайдов · учимся искать данные в XML и на веб-страницах

XPath C# XML HTML Selenium

📄 Что такое 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.

  1. Нажми F12 → открой Console.
  2. Введи: $x("//h1") — получишь все заголовки.
  3. Введи: $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>
  1. Вывести имена всех студентов.
  2. Найти студента с id=2 и вывести его имя.
  3. Найти всех студентов с оценкой 5.
💡 Используйте SelectNodes и SelectSingleNode.

✅ Итоги

  • XPath работает с XML и HTML.
  • Для XML используйте XmlDocument.
  • Для HTML используйте HtmlAgilityPack или Selenium.
  • SelectNodes — список, SelectSingleNode — один элемент.
  • Условия пишутся в [ ], атрибуты — с @.
  • XPath можно проверять прямо в браузере через $x().
🎉 Теперь вы умеете искать данные в XML и на сайтах!