Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1

ТЕМА:

XPath представляет язык запросов в XML - C# 4 года 8 мес. назад #144

  • Олег Коровяков
  • Олег Коровяков аватар Автор темы
  • Не в сети
  • Автор сайта
  • Автор сайта
  • Сообщений: 280
  • Репутация: 1
  • Спасибо получено: 1
XPath представляет язык запросов в XML. Он позволяет выбирать элементы, соответствующие определенному селектору.

Рассмотрим некоторые наиболее распространенные селекторы:

.
выбор текущего узла

..
выбор родительского узла

*
выбор всех дочерних узлов текущего узла

user
выбор всех узлов с определенным именем, в данном случае с именем "user"

@name
выбор атрибута текущего узла, после знака @ указывается название атрибута (в данном случае "name")

@+
выбор всех атрибутов текущего узла

element[3]
выбор определенного дочернего узла по индексу, в данном случае третьего узла

//user
выбор в документе всех узлов с именем "user"

user[@name='Bill Gates']
выбор элементов с определенным значением атрибута. В данном случае выбираются все элементы "user" с атрибутом name='Bill Gates'

user[company='Microsoft']
выбор элементов с определенным значением вложенного элемента. В данном случае выбираются все элементы "user", у которых дочерний элемент "company" имеет значение 'Microsoft'

//user/company
выбор в документе всех узлов с именем "company", которые находятся в элементах "user"

Действие запросов XPath основано на применении двух методов класса XmlElement:

SelectSingleNode(): выбор единственного узла из выборки. Если выборка по запросу содержит несколько узлов, то выбирается первый
SelectNodes(): выборка по запросу коллекции узлов в виде объекта XmlNodeList

Для запросов возьмем xml-документ:
<?xml version="1.0" encoding="utf-8" ?>
<users>
  <user name="Bill Gates">
    <company>Microsoft</company>
    <age>48</age>
  </user>
  <user name="Larry Page">
    <company>Google</company>
    <age>42</age>
  </user>
</users>

Теперь выберем все узлы корневого элемента, то есть все элементы user:
XmlDocument xDoc = new XmlDocument();
xDoc.Load("D://users.xml");
XmlElement xRoot = xDoc.DocumentElement;
 
// выбор всех дочерних узлов
XmlNodeList childnodes = xRoot.SelectNodes("*");
foreach (XmlNode n in childnodes)
    Console.WriteLine(n.OuterXml);

Выберем все узлы <user>:
XmlNodeList childnodes = xRoot.SelectNodes("user");

Выведем на консоль значения атрибутов name у элементов user:
XmlNodeList childnodes = xRoot.SelectNodes("user");
foreach (XmlNode n in childnodes)
    Console.WriteLine(n.SelectSingleNode("@name").Value);

Результатом выполнения будет следующий вывод:
Bill Gates
Larry Page

Выберем узел, у которого атрибут name имеет значение "Bill Gates":
XmlNode childnode = xRoot.SelectSingleNode("user[@name='Bill Gates']");
if (childnode != null)
    Console.WriteLine(childnode.OuterXml);

Выберем узел, у которого вложенный элемент "company" имеет значение "Microsoft":
XmlNode childnode = xRoot.SelectSingleNode("user[company='Microsoft']");
if (childnode != null)
    Console.WriteLine(childnode.OuterXml);

Допустим, нам надо получить только компании. Для этого надо осуществить выборку вниз по иерархии элементов:
XmlNodeList childnodes = xRoot.SelectNodes("//user/company");
foreach (XmlNode n in childnodes)
    Console.WriteLine(n.InnerText);

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
Модераторы: Дмитрий

О сайте

Строительство индивидуальных домов из лёгкого самана - опыт, советы, методика строительства и подробные инструкции. А также возможность применения альтернативных источников энергии.


Контакты

08340. ул.Салютная 17. с.Гнедын.
Киевская обл. Украина.

+38 067 492 4124.
+38 095 065 8860.

info@okwood.com.ua
www.okwood.com.ua

Местоположения


8PM2+7R Гнедин, Kyiv Oblast