Категории
Самые читаемые
RUSBOOK.SU » Компьютеры и Интернет » Интернет » XSLT - Стивен Холзнер

XSLT - Стивен Холзнер

Читать онлайн XSLT - Стивен Холзнер

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 61 62 63 64 65 66 67 68 69 ... 115
Перейти на страницу:

<xsl:template match="PLANET">

 <TR>

  <TD><xsl:apply-templates select="NAME"/></TD>

  <TD><xsl:apply-templates select="MASS"/></TD>

  <TD><xsl:apply-templates select="RADIUS"/></TD>

  <TD><xsl:apply-templates select="DAY"/></TD>

 </TR>

</xsl:template>

<xsl:template match="NAME | MASS">

 <xsl:if test="self::NAME">

  <xsl:value-of select="."/>

 </xsl:if>

 <xsl:if test="self::MASS">

  <xsl:value-of select="."/>

  <xsl:text> </xsl:text>

  <xsl:value-of select="@UNITS"/>

 </xsl:if>

</xsl:template>

.

.

.

На этом мы завершаем рассмотрение новых осей XPath. Давайте перейдем к примерам.

Примеры путей расположения

Мы изучили достаточно теории путей расположения. Но, понятно, лучше всего осваивать этот материал на примерах, поэтому я привожу следующий список примеров путей расположения (сокращенные варианты рассматриваются после этого списка):

• child::PLANЕТ. Возвращает дочерние элементы <PLANЕТ> контекстного узла;

• child::text(). Возвращает все дочерние текстовые узлы контекстного узла;

• child::node(). Возвращает всех детей контекстного узла;

• attribute::UNIT. Возвращает атрибут UNIT контекстного узла;

• descendant::PLANET. Возвращает все элементы-потомки <PLANET> контекстного узла;

• ancestor::PLANET. Возвращает всех предков <PLANET> контекстного узла;

• ancestor-or-self::PLANET. Возвращает предков <PLANET> контекстного узла. Если контекстным узлом тоже является <PLANET>, возвращает также контекстный узел;

• descendant-or-self::PLANET. Возвращает элементы-потомки <PLANET> контекстного узла. Если контекстным узлом тоже является <PLANET>, возвращает также контекстный узел;

• self::PLANET. Возвращает контекстный узел, если им является элемент <PLANET>;

• child::PLANET/descendant::NAME. Возвращает элементы-потомки <NAME> дочерних элементов <PLANET> контекстного узла;

• child::*/child::PLANET. Возвращает всех внуков <PLANET> контекстного узла;

• /. Возвращает корневой узел;

• /descendant::PLANET. Возвращает все элементы <PLANET> в документе;

• /descendant::PLANET/child::NAME. Возвращает все элементы <NAME> с родителем <PLANET> в документе;

• child::PLANET[position()=3]. Возвращает третьего ребенка <PLANET> контекстного узла;

• child::PLANET[position()=last()]. Возвращает последнего ребенка <PLANET> контекстного узла;

• /descendant::PLANET[position() = 3]. Возвращает третий элемент <PLANET> в документе;

• child::PLANETS/child::PLANET[position()=4]/child::NAME[position()=3]. Возвращает третий элемент <NAME> четвертого элемента <PLANET> элемента <PLANETS>;

• child::PLANET[position()>3]. Возвращает всех детей <PLANET> контекстного узла после первых трех;

• preceding-sibling::NAME[position()=2]. Возвращает второй предыдущий элемент-брат <NAME> контекстного узла;

• child::*[self::NAME or self::MASS]. Возвращает детей <NAME> и <MASS> контекстного узла.

• child::*[self::NAME or self::MASS][position()=last()]. Возвращает последнего ребенка <NAME> или <MASS> контекстного узла.

Как видите, синтаксис некоторых выражений достаточно запутан, и набирать их также довольно долго. Но, как и для образцов, существует сокращенная форма синтаксиса XPath.

Сокращенный синтаксис XPath

Сокращения синтаксиса XPath могут быть весьма удобными. Ниже приведены правила:

• self::node() может быть сокращено как .;

• parent::node() может быть сокращено как ..;

• child::childname может быть сокращено как childname;

• attribute::childname может быть сокращено как @childname;

• /descendant-or-self::node()/ может быть сокращено как //.

Например, путь расположения .//PLANET — сокращение для self::node()/descendant-or-self::node()/child::PLANET. Можно также сократить выражение предиката [position()=3] как [3], [position()=last()] как [last()] и т.д. Работать с путями расположения XPath при помощи сокращенного синтаксиса значительно проще. В следующем списке перечислен ряд примеров путей расположения с использованием сокращенного синтаксиса:

• PLANET возвращает дочерние элементы <PLANET> контекстного узла;

• * возвращает все дочерние элементы контекстного узла;

• text() возвращает все дочерние текстовые узлы контекстного узла;

• @UNITS возвращает атрибут UNITS контекстного узла;

• @* возвращает все атрибуты контекстного узла;

• PLANET[3] возвращает третьего ребенка <PLANET> контекстного узла;

• PLANET[last()] возвращает последнего ребенка <PLANET> контекстного узла;

• */PLANET возвращает всех внуков <PLANET> контекстного узла;

• /PLANETS/PLANET[3]/NAME[2] возвращает второй элемент <NAME> третьего элемента <PLANET> элемента <PLANETS>;

• //PLANET возвращает всех потомков <PLANET> корня документа;

• PLANETS//PLANET возвращает элементы-потомки <PLANET> дочерних элементов <PLANETS> контекстного узла;

• //PLANET/NAME возвращает все элементы <NAME>, у которых есть родитель <PLANET>;

• . возвращает сам контекстный узел;

• .//PLANET возвращает элементы-потомки <PLANET> контекстного узла;

• .. возвращает родителя контекстного узла;

• ../@UNITS возвращает атрибут UNITS родителя контекстного узла;

• .//.. возвращает всех родителей потомка контекстного узла и родителя контекстного узла;

• PLANET[NAME] возвращает детей <PLANET> контекстного узла, у которых есть дети <NAME>;

• PLANET[NAME="Venus"] возвращает детей <PLANET> контекстного узла, у которых есть дети <NAME> с текстом, равным «Venus»;

• PLANET[@UNITS="days"] возвращает всех детей <PLANET> контекстного узла, у которых есть атрибут UNITS со значением «days»;

• PLANET[6][@UNITS="days"] возвращает шестого ребенка <PLANET> контекстного узла, только если у этого ребенка есть атрибут UNITS со значением «days». Можно также написать PLANET[@UNITS="days"][6];

• PLANET[@COLOR and @UNITS] возвращает всех детей <PLANET> контекстного узла, у которых есть атрибут COLOR и атрибут UNITS;

• "//PLANET[not(.=preceding::PLANET)]" выбирает все элементы <PLANET>, значение которых отлично от значения любого предшествующего элемента <PLANET>;

• *[1][self::NAME] выбирает любой элемент <NAME>, который является первым ребенком своего родителя;

• *[position() &lt; 5][@UNITS] выбирает первых пятерых детей контекстного узла, у которых есть атрибут UNITS.

Проверка выражений XPath

В пакет Xalan входит удобная программа-пример, ApplyXPath.java, позволяющая применить выражение XPath к документу и посмотреть на результат, что очень помогает при тестировании. Для запуска этого примера вам нужно будет скомпилировать ApplyXPath.java в ApplyXPath.class при помощи утилиты java.exe, входящей в поставку Java.

В качестве примера я применю выражение XPath «PLANET/NAME» к planets.xml при помощи ApplyXPath.class. Ниже показан результат, отображающий все элементы <NAME>, дочерние по отношению к элементам <PLANET> (теги <output> добавлены программой ApplyXPath):

%java ApplyXPath planets.xml PLANET/NAME

<output>

 <NAME>Mercury</NAME><NAME>Venus</NAME><NAME>Earth</NAME>

</output>

XPath 2.0

XPath находится в стадии обновления, и в него включаются средства поддержки XSLT 2.0 (см. www.w3.org/TR/xpath20req). Задачи XPath 2.0 следующие:

• упрощение операций с содержимым типов, поддерживаемых схемой XML;

• упрощение операций со строковым содержимым;

• поддержка соответствующих стандартов XML;

• улучшение удобства использования;

• улучшение функциональной совместимости;

• улучшение поддержки международных языковых средств;

• сохранение обратной совместимости;

• повышенная эффективность процессора.

Следующий список дает обзор требований XPath. Главные пункты — поддержка схемы XML и регулярных выражений, что дает средства работы со строками и поиска в строках. (Дополнительную информацию о регулярных выражениях можно почерпнуть по адресу http://www.perldoc.com/perl5.6/pod/perlre.html.) В соответствии с W3C, XPath 2.0:

• должен поддерживать архитектуру XML W3C, хорошо взаимодействуя с другими стандартами в семействе XML;

1 ... 61 62 63 64 65 66 67 68 69 ... 115
Перейти на страницу:
На этой странице вы можете бесплатно скачать XSLT - Стивен Холзнер торрент бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Вася
Вася 24.11.2024 - 19:04
Прекрасное описание анального секса
Сергій
Сергій 25.01.2024 - 17:17
"Убийство миссис Спэнлоу" от Агаты Кристи – это великолепный детектив, который завораживает с первой страницы и держит в напряжении до последнего момента. Кристи, как всегда, мастерски строит