Учебное пособие (1075724), страница 6
Текст из файла (страница 6)
Символ @означает, что за ним следует название атрибута, а неэлемента.29//*/@*Все атрибуты всех элементов документа.Обратите внимание, что если в запросе используется //, то такой запросможет «подтягивать» элементы на более высокий уровень иерархии. Например, взапросе A//*, элементы E и G возвращаются на одном уровне иерархии, хотя всоответствии с примером элемент G вложен в E.2.1.2 Фильтры и сравненияЕсли после названия элемента стоит выражение в квадратных скобках, то этоозначает, что к элементу применяется фильтр.
Выбираются не все элементы, атолько те, которые удовлетворяют фильтру.В качестве фильтра может быть задано число, которое определяет номерэлемента. Это похоже на использование индексов в массиве. Или в качествефильтра может быть задано условие поиска.30Таблица 2.2. Фильтры и сравнения.A/B[1]Первый элемент B, вложенный в A.(ВнекоторыхреализацияхXPathнумерацияначинается с 0, в некоторых с 1).A/B[last()]Последний элемент B, вложенный в A.Функция last() возвращает индекс последнего элементав последовательности.31//A[(B or C) and E]Поиск такого элемента A, в который вложеныэлементы B или C и вложен элемент E. Значенияэлементов B, C, E в данном запросе не важны. Здесьпроверяется только наличие вложенных элементов.//A[B and not(Z)]Поиск такого элемента A, в который вложен B и невложен Z.//A[B!="str1"]Поиск такого элемента A, у которого есть вложенныйэлемент B не равный «str1».32//B[@b="b1"]Поиск элемента B, у которого есть атрибут b=b1.Символ @ означает, что за ним следует названиеатрибута, а не элемента.//C[.
= "C1"]Поиск элемента C = C1. Точка означает, чтопроверяется значение текущего элемента./A//E[@e="e1" and Все элементы G, непосредственно вложенные в E.B="B2"]/GЭлемент Е вложен в A на любой глубине. Элемент Анепосредственно вложен в корневой элемент. ЭлементE должен содержать атрибут e=e1 и вложенныйэлемент B=B2.33//A[B="B1"]/Элемент B=B2 должен быть вложен в Е. Элемент ЕE[@e="e1"]/B[.="B2"] должен содержать атрибут e=e1.
Элемент Е долженбыть вложен в элемент А. Элемент А долженсодержать вложенный элемент B=B1.Этотпримерприменятьсякпоказывает,чтоэлементамнафильтрылюбоймогутглубиневложенности и фильтрами могут быть снабженынесколько элементов в запросе.//number[@id<2 or@id>2]Поиск элементов number, у которых атрибут id<2 илиатрибут id>2.34//text()Все текстовые узлы документаДля сравнения могут быть использованы следующие операторы: =(равенство), != (неравенство), <, <=, >, >=.В некоторых реализациях XPath знаки <, >, заменяются на соответствующиессылки на символы < и >. Тогда операторы сравнения <=, >= будут записаныкак <=, >=.Для выборки конструкций определенного типа (иногда их называют узламидокумента) можно использовать следующие функции: text() – любой текстовый узел. node() – любой узел, который не является атрибутом и корневымэлементом. comment() – комментарий. processing-instruction() – инструкция обработки.2.1.3 Оси выборкиОси выборки служат для определения направления движения по деревуузлов.35Таблица 2.3.
Основные оси выборки.НазваниеОписаниеСокращеннаяформа записи осивыборкиselfТекущий узелchildНепосредственно.вложенные/узлыparentРодительский узел..descendantПотомки узла на любой глубине//вложенностиdescendant-or-selfУзел и его потомкиancestorПредки узлаancestor-or-selfСам узел и его предкиfollowingВсе узлы после данногоfollowing-siblingВсе узлы этого же уровня последанногоprecedingВсе узлы перед даннымpreceding-siblingВсе узлы этого же уровня передданнымattributeУзлы атрибутовnamespaceУзлы пространства имен@36Таблица 2.4. Примеры использования осей выборки.//A/child::* или //A/*Элементы, непосредственно вложенные в A.37//A/descendant::* или //A//* Элементы, вложенные в A на любой глубине.38//A/descendant-or-self::*Элементы, вложенные в A на любой глубине исам элемент А.//G/parent::* или //G/..Узел,вкоторыйнепосредственновложенэлемент G.39//G/ancestor::*Все узлы, в которые вложен элемент G.//G/ancestor::*[C="C1"]Из узлов, в которые вложен элемент G, выбратьтот, у которого есть вложенный элемент C=C140//G/ancestor::*[name()="A"] Из узлов, в которые вложен элемент G, выбратьтот, который называется А.//E/attribute::* или //E/@*Все атрибуты элемента Е.A/E/preceding-sibling::*Узлы, следующие перед E на том же уровнеиерархии.41A/E/following-sibling::*Узлы, следующие после E на том же уровнеиерархии.С точки зрения начального элемента (начальной точки) выполнения запросаможно выделить два вида запросов:1.
Запросы, в которых начальной точкой является корневой элементдокумента (начинаются с « / »).2. Контекстные запросы, в которых начальной точкой запроса являетсяопределенный контекст, то есть определенный элемент в документе.В технологии XSLT обычно применяются контекстные запросы.Использование осей выборки особенно полезно в контекстных запросах.Например, находясь в определенном контексте, мы не знаем, какой узел являетсяродительским, но его можно определить с помощью оси parent.2.1.4 Функции XPathДля удобства работы с данными в XPath включена библиотека функций.Функции XPath можно разделить на четыре группы:1. Функции для работы с элементами и атрибутами (например, такиефункции,какlast(возвращаетиндекспоследнегоэлементавпоследовательности), name(возвращает название элемента), id(поискэлемента по атрибуту id), count(определение количества элементов) ).2.
Функции для работы со строками (например, concat(соединение строк),substring(возвращает подстроку), string-length(длина строки) )423. Функции для работы с булевыми значениями (например, функцияnot(инверсия значения)).4. Функции для работы с числами (например, функция sum(суммаэлементов), number(преобразование в число), функции floor, ceiling,round для округления).Таблица 2.5.
Примеры использования функций XPath.id(1)Значение элемента, у которого атрибут id=1.Предполагается, что значение атрибута id всегдауникально в рамках документа.count(A/B)Количество элементов В, вложенных в А.43concat(A/B[1],A/B[2])Соединение строк, хранящихся в A/B[1] и вA/B[2].string-length(A/B[1])Длина строки, хранящейся в A/B[1].sum(//numbers/number)Сумма элементов number, вложенных в numbers.44sum(//numbers/number/@id)Сумма атрибутов id элементов number, вложенныхв numbers.number(substringПолучение одного символа со второй позиции из(A/B[1],2,1)) + 2значения элемента A/B[1] (это символ «1»),преобразование в число, прибавление 2.Более подробное описание функций можно найти в спецификации.2.1.5 Арифметические действияВ XPath предусмотрены основные арифметические действия, а такжефункции округления. Наверное, выполнение арифметических действий не главнаяособенность языка запросов, но в некоторых запросах это может быть полезно.45Таблица 2.6. Арифметические действия в XPath.//number[1] +Сложение первого и второго элементов number.//number[2]//number[1] -Вычитание.//number[2]//number[1] *Умножение.//number[2]//number[2] div 3div – деление.46floor ( //number[2]div 3)Функция floor – округление в меньшую сторону доближайшегоцелого.Функцияможетбытьиспользована для получения целой части при делении.ceiling(//number[2]div 3)round(//number[2]Функция ceiling – округление в большую сторону доближайшего целого.Округление до ближайшего целого.div 3)//number[3] modmod – получение остатка от деления.(//number[2]+1)472.1.6 Стандарт XPath 2.0В этом разделе рассмотрены основы XPath 1.0.
Более подробно XPath 1.0рассмотрен в спецификации [XPath, 1999], а также в [Валиков, 2002].В январе 2007 года появился стандарт XPath 2.0 [XPath, 2007], которыйфактически является стандартом XQuery 1.0 [XQuery, 2007] с некоторымиограничениями.Однако стандарт XPath 1.0 не стоит считать устаревшим, так как онявляется основой XPath 2.0. В большом количестве реализаций технологии XSLTпока используется версия XPath 1.0. XPath 1.0 также используется в технологииXForms.2.2 Технология XSLT2.2.1 Отображение XML-документа с использованием CSSДля просмотра документов XML можно использовать таблицы стилей CSS,однако эта технология предоставляет только самые простые возможностиформатирования.
С ее помощью можно изменить внешний вид, цвет, шрифт,другие параметры элементов, но нельзя, например, изменить порядок выводаэлементов.Пример 2.2. Использование CSS для просмотра документа XML.Файл XML:<?xml version="1.0" encoding="Windows-1251"?><?xml-stylesheet type="text/css" href="style.css"?><!-- Языки разметки --><languages><language id="1"><name>HTML</name><year>01.01.1990</year><howold>19</howold></language><language id="2"><name>XML</name>48<year>01.01.1998</year><howold>11</howold></language><language id="3"><name>SGML</name><year>01.01.1986</year><howold>23</howold></language><empty attr1="1" attr2="текст"/><CDATA_Example><![CDATA[<<<<<<<<<<>>>>>>>>>]]></CDATA_Example></languages>Файл CSS:language{background-color : Gray;display : block;}name{color : Navy;font-size : larger;font-style : italic;font-weight : bold;}49Рис.














