Статьи

XPath 101

В дополнение к моей последней статье эта статья покажет вам, как использовать возможности 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 🙂