CyberGuru.ru - программирование, исходники, операционные системы
 

[Новые статьи по программированию]

02.03.2014 Статья познакомит программистов C/C++ с Python/C API, библиотекой C, помогающей встраивать модули Python в приложения C/C++. Библиотека API предоставляет множество подпрограмм C для инициализации инте...
24.01.2014 Назначение этой статьи – показать несколько методов экспорта классов C++ из модуля DLL. Исходный код демонстрирует разные приемы экспорта воображаемого объекта Xyz.
15.01.2014 Назначение статьи – показать, как вызвать функции другой программы через вашу собственную. Это руководство будет разбито на серию шагов с общим примером, сопровождаемым применением знаний к настоящей...
07.01.2014 В данной статье представлен класс, который добавляет типобезопасные обратные вызовы C++ в проекты.
07.01.2014 В первой чати были показаны преимущества и использование обобщений в Java 5. В этой части рассматривается, как они реализованы в Java, и разбирается ряд проблем с ними.
13.11.2013 Данная статья продолажет предыдущю по теме изучения способа написания приложений Win32 с помощью одних классов C++.
13.11.2013 Данная статья рассматривает причины для развития кода от предыдущей до новой реализации. Хотя общие принципы те же, есть значительная разница.
11.11.2013 Данная статья продолжает первую часть. Здесь к NLib добавляются другие возможности.

[Новые статьи о Microsoft.NET]

13.03.2014 Silverlight 3, несомненно, превосходная технология для веб-программирования. Данная статья рассматривает отображение данных из базы данных SQL Server в приложении Silverlight 3.
09.03.2014 Данная статья кратко объясняет распространенные криптосистемы и подробно описывает два самых популярных шифра с закрытым ключом: DES –  наиболее широко используемый, и AES – собирающийся заменить DES.
08.03.2014 Часто необходимо реализовать логику предварительной обработки прежде, чем запрос достиг ресурсов IIS. Например, надо применить механизм защиты, замену URL, отфильтровать что-то в запросе и т. д. ASP.N...
04.03.2014 Статья объясняет, как использовать обычную веб-службу ASP.NET вместе с Adobe Flex. Используется тег flex <mx:WebService>, чтобы заставить это работать. Для понимания статьи нужны базовые знания...
03.03.2014 В данной статье объясняются асинхронные вызовы методов и принципы их использования, будет показано, как вызывать методы асинхронно, как передавать параметры таким методам, и как узнать, когда метод за...
03.03.2014 Это третий выпуск в серии часто задаваемых вопросов о LINQ. В этом выпуске рассмотрены часто задаваемые вопросы о LINQ, касающиеся обработки параллельности, компилируемых запросов, реализации CRUD(соз...
24.01.2014 Большее число клиентов означает большее число запросов к веб-серверу и тяжелую нагрузку на сеть, вызывающую падение производительности. Для решения этой проблемы было применено кэширование в веб-прило...
16.01.2014 Новыми форматами файла Office 2007 являются файлы ZIP, содержащими части, некоторые из которых являются XML, некоторые другие являются родными форматами файлов, такими как изображения JPEG, а остальны...

[Новые статьи о Web-технологиях]

06.07.2013 Введение в написание объектно- ориентированных структур на JavaScript...
24.06.2013 Метод чтения источника данных XML из файла или AJAX и последующего представления его в Internet Explorer в виде GUI (графический интерфейс пользователя).
12.08.2012 Создайте вашу собственную разновидность JavaScript при помощи прототипов.
07.05.2011 Компонента Tree (Дерево) в JavaScript, которая реализует алгоритм разметки J.Q.Walker II .
21.11.2009 Краткое руководство по JavaScript для новичков.
23.03.2009 Так же, как электронная почта изменила деловое общение, совместная работа на основе веб-технологий меняет процесс взаимодействия людей и обмена информацией. В качестве хорошего примера рассмотрим возм...
13.02.2009 Возможно вам уже известны основы программирования средств безопасности с помощью Windows® и безопасности ASP.NET, но известно ли вам о дополнительном уровне безопасности, добавляемом Windows Share...
09.02.2009 Частые изменения учетных данных фермы и паролей учетных данных безопасности являются важными мерами поддержания фермы Microsoft Office SharePoint Server (MOSS) в безопасном состоянии. Однако для админ...

[Новые статьи по базам данных]

13.04.2009 Когда строки не сохраняются рядом, или если строки разбиты больше чем в один блок, снижается производительность, потому что эти строки требуют дополнительного доступа к блокам.
13.04.2009 Oracle, предоставляет несколько маленьких и изящных средств управления табличными пространствами...
13.04.2009 В предыдущих версиях Oracle, сделать таблицу только для чтения, для других пользователей можно было дав объектные привелегии SELECT пользователю. Но для самого владельца таблица оставалась доступной д...
13.04.2009 Ручное создание базы является одним из показателей профессионализма DBA. Как правило используется мастер создания, предлагаемый Oracle.
09.02.2009 Одними из самых непонятных составных частей SQL Server являются механизмы ведения журнала и восстановления. Складывается впечатление, что сам факт существования журнала транзакций и то, что неправильн...
03.02.2009 Производительность любого приложения базы данных в большой степени опирается на выполнение им запросов. Хотя оптимизатор Oracle идеально подходит для оценки наилучшего возможного плана без какого-либо...
03.02.2009 Эта статья рассказывает о том, как inline-подмена, Real native compilation и использование simple_integer могут улучшить производительность кода. Oracle Database 11g представляет несколько отличных но...
03.02.2009 Хорошая модель и правильный проект базы данных формируют основу информационной системы. Построение слоя данных - часто первый критичный шаг в направлении создания новой системы, который правомерно тре...

[Новые статьи об операционных системах и софте]

23.03.2009 Известно, что доменные службы Active Directory (ADDS) — один из компонентов, обязательных для функционирования инфраструктуры Windows. Если Active Directory выходит из строя, сеть, по большей ча...
27.01.2009 Windows уже довольно давно поставляется в комплекте с интегрированной системой сетевой проверки подлинности и единого входа. До Windows 2000 контроллеры доменов Windows NT предоставляли клиентам Windo...
27.01.2009 С тех пор, как кластеризация впервые появилась в Windows NT 4.0 Enterprise Edition, пользователи жаловались, что ее сложно создавать и еще сложнее обслуживать. Администрирование кластера требовало от...
26.01.2009 И вновь мы возвращаемся к разговору о бета-версии Windows 7. Возвращаемся для того, чтобы поговорить о различных ее секретах и хитростях, позволяющих в ряде случаев существенно упростить работу на ком...
22.01.2009 Windows Server 2008 — новейшая версия серверной платформы Майкрософт, в которую внесены на уровне системы изменения, охватывающие все функциональные участки операционной системы, от управления п...
21.01.2009 Виртуализация серверов обещает существенно повлиять на работу корпоративных отделов ИТ, а Hyper-V с Windows Server 2008 могут сделать это реальностью. Консолидация серверов на меньшее число физических...
21.01.2009 В последнее время идет немало разговоров о виртуализации и основная часть этой дискуссии вертится вокруг виртуализации серверов. Это одна из наиболее интересных тенденций в отрасли, потенциально спосо...
21.01.2009 В прошлый раз мы создали VHD-образ с Window 7 для Virtual PC . Понятное дело, что в виртуальной среде, конечно, есть свои преимущества, но тем не менее, хотелось бы, чтобы все работало пошустрее&helli...

[Новые статьи о железе и сетях]

23.01.2009 Я постараюсь в этой статье подробно описать то, как настроить прокси-сервер и с его помощью на стороне клиента подключаться к сети интернет. Программа, на которой будет осуществляться демонстрация это...
23.01.2009 Как подключить несколько компьютеров между собой и к Интернету, распределяя одинаковую скорость к Интернету? Через такие соединения вы сможете не только пользоваться файлами, расположенными на другом...
13.01.2009 Процессоры Intel Core 2 Duo (и не только они одни!) содержат множество ошибок, приводящих к сбоям программного обеспечения, зависаниям операционной системы и даже возможности удаленного захвата управл...
13.01.2009 Если Вы читаете этот документ, то скорее всего вы подсоединены к Интернету, и используете трансляцию сетевых адресов (Network Address Translation, NAT) прямо сейчас! Интернет стал настолько огромным...
13.01.2009 Используя терминологию Cisco, в контексте NAT есть четыре основных определения для IP-адресов. Рассмотрим их на примере, показанном на рисунке ниже. На обоих маршрутизаторах делается NAT (network addr...
12.01.2009 В данном документе мы рассмотрим, что такое IP фрагментация, как она происходит и почему является нежелательным явлением в сетях, а также рассмотрим пару сценариев как ее предотвратить.
12.01.2009 GRE (Generic Routing Encapsulation) — протокол туннелирования сетевых пакетов, разработанный фирмой Cisco. Протокол GRE обеспечивает механизм инкапсуляции произвольных пакетов в произвольный тра...
12.01.2009 Туннелирование - способ инкапсуляции произвольных пакетов одного протокола в какой-либо другой транспортный протокол. Для упрощения конфигурирования туннелирование реализовано в виде виртуального (лог...

ОГЛАВЛЕНИЕ

Поиск по документу с XPath

XML Path Language (XPath) - язык, применяемый для получения наборов узлов XML-документа и адресации частей XML-документа. Он обеспечивает компактный, эффективный, логичный синтаксис для ссылок на узлы документа, тесно связан с XSLT и предоставляет стандартные средства для работы со строками, числами и булевскими значениями.

Пути в XPath формируются из названий узлов, разделенных слешами. Путь к товару будет описан следующим выражением.

Заказы/Заказ/Товар

Для идентификации элемента во всех местах документа нужно использовать два слеша в начале выражения:

//Товар 

Для указания неизвестных элементов в пути можно воспользоваться символом *. Например, можно задать вот такой путь для поиска руководителей отделов

Отделы/*/Руководитель

Для фильтрации элементов документа нужно использовать предикаты - выражения, заключенные в квадратные скобки. В предикатах могут участвовать атрибуты тегов и значения вложенных тегов. При этом, перед атрибутами тегов, участвующих в фильтрации, ставиться амперсанд @, а перед вложенными тегами - нет. Предикаты можно объединять ключевыми словами or и and. Для нахождения заказов из Москвы или Уфы нужно использовать такое выражение:

Заказы/Заказ[@Адрес = "Уфа" or @Адрес = "Москва"]

Для работы с XPath в .NET используются классы XPathNavigator и XPathNodeIterator. XPathNavigator выполняет XPath запросы, а перемещение по узлам, полученным в результате запроса осуществляется с помощью XPathNodeIterator. С помощью XPathNavigator можно перемещаться по документу в произвольном направлении. Для перехода к родительскому узлу есть метод MoveToParent, а для переход к первому дочернему узлу - MoveToFirstChild. Свойство HasChildren возвращает true если у текущего узла есть дочерние. Для перебора атрибутов текущего узла есть методы MoveToFirstAttribute, MoveToNextAttribute. В нашей программе мы используем XPath для поиска товаров, стоимостью более 300 рублей, и нахождения их суммарной стоимости. Рассмотрим эту функцию. 

OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "Файлы XML (*.xml)|*.xml"; if (dlg.ShowDialog() ! = DialogResult.OK)
    return;

XmlDocument doc = new XmlDocument();
orders.Clear();

try
{
    doc.Load(dlg.FileName);

    // находим стоимость всех товаров
    XPathNavigator nav = doc.CreateNavigator();
    XPathNodeIterator it = (XPathNodeIterator)nav.Evaluate("Заказы/Заказ/Товар[@Цена > 300]");

    StringBuilder sb = new StringBuilder();
    sb.Append("Дорогие товары:");
    float total = 0;

    while (it.MoveNext())
    {
         sb.AppendFormat("\n{0}", it.Current.GetAttribute("Цена", ""));
         total += float.Parse(it.Current.GetAttribute("Цена", ""));
    }

    sb.AppendFormat("\n--------------------\nИтого: {0} рублей", total);

    // получаем все заказы
    XmlNodeList ordersList = doc.DocumentElement.ChildNodes;

    foreach (XmlNode nodeOrder in ordersList)
    {
        Order order = new Order(nodeOrder.Attributes["Адрес"].Value, DateTime.Parse(nodeOrder.Attributes["Дата"].Value));

        // получаем все товары из заказа
        XmlNodeList goodsList = nodeOrder.ChildNodes;

        foreach (XmlNode nodeGood in goodsList)
            order.AddGood(nodeGood.Attributes["Название"].Value, float.Parse(nodeGood.Attributes["Цена"].Value));

        orders.Add(order);
    }

    ShowOrders();

    // выводим адреса заказов
    MessageBox.Show(sb.ToString());
}
catch (Exception ex)
{
    MessageBox.Show("Ошибка: " + ex.Message);
}

На первом этапе мы создаем XmlDocument и загружаем XML-файл, указанный пользователем. Объект XPathNavigator создается вызовом метода CreateNavigator. Мы выполнили XPath-запрос с помощью метода Evalate, выполняющим произвольный запрос. Результатом может быть число, строка, булевское значение или набор узлов, как в нашем случае. Этот метод мы выбрали только для примера, т.к. для получения именно набора узлов лучше пользоваться методом Select. Он также принимает строку с XPath выражением, но сразу возвращает объект XPathNodeIterator. В нашем примере мы искали все товары, цена которых более 300 рублей. Для перебора всех узлов, найденных методом Evalate, вызываем метод MoveNext() и для каждого узла получаем значение атрибута Цена. Все найденные цены суммируются, а из значения сохраняются в текстовом виде в StringBuilder.

 

Кондратьев Денис 

Читайте также:
  • COM+ и .NET – практичный подход - часть 1
    Вторая часть описывает все управляющие преимущества, которые приложение может получить от COM+. Эта часть содержит подробности об улучшении доступности и стабильности с помощью COM+ и о том, кого надо отслеживать и как использовать данные слежения для быстрого и легкого обнаружения источников проб...
  • Межпроцессная коммуникация посредством .NET
    •    Загрузить демо-проект - 85.41 KB•    Загрузить исходный код - 11.99 KB Введение Данная статья показывает быструю и простую в применении реализацию для связи между доменами приложений в .NET путем использования родной передачи сообщений Windows. Библиотека XDMessaging основана на коде, раз...
  • Передача данных из SAP в .NET с помощью ERPConnect
    • Скачать пример 1 (C#) - 7.35 Кб• Скачать пример 1 (VB.NET) - 12.57 Кб• Скачать пример 2 (C#) - 15.14 Кб• Скачать пример 2 (VB.NET) - 16.38 Кб Введение В проекте для последнего заказчика пришлось реализовать своего рода "программу быстрого заказа" для компании-производителя машин. Целью этого п...
  • Потоки и синхронизация: часть 1
    Введение Современная многопроцессорная операционная система выполняет несколько операций одновременно, даже если в системе есть только один физический процессор. Теоретически это кажется невозможным, но рассмотрим, как достигается параллельная обработка с помощью одного процессора. Есть много эт...
  • Формат файла .NET – внутренняя структура сигнатур, часть 2 из 2
    •    Скачать двоичные DLL примеров программ – signatures_binary.zip - 16.07 Кб•    Скачать исходный код примеров программ - signatures_source.zip - 6.14 KB Оглавление 1. Сигнатуры (продолжение) 1.1 LocalVarSig 1.2 CustomAttrib 1.3 MethodSpec 1.4 TypeSpec 1.5 MarshalSpec 2. Элементы ...