В дополнение к моей последней статье эта статья покажет вам, как использовать возможности XPath на своем примере.
XPath — это язык запросов для XML, похожий на SQL для реляционных баз данных (хорошо, немного похожий!), Который используется для извлечения узлов из файла XML.
Давайте посмотрим на некоторые примеры:
Вот наш XML-файл для анализа:
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Oasis $9.99 Oasis $13.99 The Beatles $12.99
Мы можем использовать запросы XPath через метод XmlDocument.SelectNodes, чтобы вернуть набор узлов, соответствующих нашему запросу. Давайте настроим это:
string fileName = Server.MapPath("catalog.xml"); XmlDocument doc = new XmlDocument(); doc.Load(fileName);
Наш XmlDocument теперь готов к запросу. Вместо того, чтобы объяснять специфику языка запросов, я думаю, что это лучше показать на примере. Полную информацию о XPath можно найти здесь .
Хорошо, давайте выберем все диски в нашем каталоге:
XmlNodeList cdNodes = doc.SelectNodes("catalog/cd");
Легко, а? Обратите внимание, мы просто записываем «путь», где наши узлы находятся в файле XML, используя / для обозначения уровня иерархии.
Давайте немного сложнее. Следующее выражение XPath выберет все компакт-диски исполнителя Oasis:
XmlNodeList cdNodes = doc.SelectNodes("//cd[artist='Oasis']");
Обратите внимание на двойную косую черту в начале этого выражения. Двойная косая черта указывает XPath посмотреть на любой элемент CD, с которым он сталкивается, независимо от того, где именно он находится в иерархии. На самом деле, двойная косая черта экономит нам время, позволяя нам не выписывать весь путь иерархии (если бы вы это сделали, это был бы «catalog / cd [artist = ‘Oasis’]»)
Второе отличие этого выражения заключается в том, что мы запрашиваем все узлы, у которых подэлемент «художник» равен Oasis. Квадратная скобка используется для обозначения любого типа запроса. Мы можем объединить эти запросы, используя обычные «и» s и «или» s.
Наконец, я покажу, как извлечь конкретный узел из элемента. Следующий запрос вернет цену всех компакт-дисков Beatles в нашем каталоге:
XmlNodeList cdNodes = doc.SelectNodes("//cd[artist='The Beatles']/price");
Так заканчивается краткое руководство по XPath 🙂