`

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

1 ... 56 57 58 59 60 ... 115 ВПЕРЕД
Перейти на страницу:

   </TR>

   <TR>

    <TD><B>Earth</B></TD>

    <TD><B>1 (Earth = 1)</B></TD>

    <TD><B>2107 miles</B></TD>

    <TD><B>1 days</B></TD>

   </TR>

  </TABLE>

 </BODY>

</HTML>

Этот документ показан на рис. 6.4.

Рис. 6.4. Применение режимов обработки 

Режимы также очень удобны в том случае, когда требуется обработать один и тот же документ более одного раза; классический пример — создание оглавления.

Следующий пример демонстрирует создание оглавления. Я добавил в planets.xml оглавление в элементе <TOC> (table of contents, оглавление), имеющем три элемента <ENTRY> для каждой из планет. Заметьте, что здесь мне необходимо применить два шаблона, выбирающие элементы <PLANET>, — один для создания оглавления и еще один для копирования всех элементов <PLANET> в результирующий документ — я использую режимы для того, чтобы их различать. Начну с установки режима в «toc» и применения шаблона, который поддерживает этот режим и создает оглавление:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http//www.w3.org/1999/XSL/Transform">

 <xsl:output method="xml"/>

 <xsl:template match="PLANETS">

  <PLANETS>

   <TOC>

    <xsl:apply-templates mode="toc"/>

   </TOC>

   .

   .

   .

  </PLANETS>

 </xsl:template>

 <xsl:template match="PLANET" mode="toc">

  <ENTRY>

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

  </ENTRY>

 </xsl:template>

 .

 .

 .

Затем я применяю общий шаблон без каких-либо режимов обработки ко всем элементам и атрибутам, копируя их в результирующий документ (листинг 6.14).

Листинг 6.14. Создание оглавления

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:output method="xml"/>

 <xsl:template match="PLANETS">

  <PLANETS>

   <TOC>

    <xsl:apply-templates mode="toc"/>

   </TOC>

   <xsl:apply-templates select="@*|node()"/>

  </PLANETS>

 </xsl:template>

 <xsl:template match="PLANET" mode="toc">

  <ENTRY>

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

  </ENTRY>

 </xsl:template>

 <xsl:template match="@*|node()">

  <xsl:copy>

   <xsl:apply-templates select="@*|node()"/>

  </xsl:copy>

 </xsl:template>

</xsl:stylesheet>

И, наконец, результат, выводящий planets.xml с оглавлением:

<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xml" href="planets.xsl"?>

<PLANETS>

 <TOC>

  <ENTRY>Mercury</ENTRY>

  <ENTRY>Venus</ENTRY>

  <ENTRY>Earth</ENTRY>

 </TOC>

 <PLANET>

  <NAME>Mercury</NAME>

  <MASS UNITS="(Earth = 1)">.0553</MASS>

  <DAY UNITS="days">58.65</DAY>

  <RADIUS UNITS="miles">1516</RADIUS>

  <DENSITY UNITS="(Earth = 1)">.983</DENSITY>

  <DISTANCE UNITS="million miles">43.4</DISTANCE><!--В перигелии->

 </PLANET>

 .

 .

 .

</PLANETS>

В этой главе мы рассмотрели большую часть базового материала, и в следующей главе я собираюсь уделить внимание созданию полных выражений XPath. Хотя вы уже немного знакомы с этой темой по обсуждению образцов выбора в главе 4, нам осталось еще рассмотреть весьма значительную часть.

Глава 7 

Работа с XPath

В главе 4 было объяснено, как создавать образцы выбора, которые можно использовать в атрибуте match таких элементов, как <xsl:template>. Образцы являются подмножеством полного языка XPath, и в этой главе будет рассмотрена полная версия XPath.

Выражения XPath применимы в XSLT не только в образцах выбора, но и во многих других приложениях: в атрибуте select элементов <xsl:apply-templates>, <xsl:value-of>, <xsl:for-each>, <xsl:param>, <xsl:variable>, <xsl:with-param>, <xsl:copy-of> и <xsl:sort>, в шаблонах значений атрибутов, в атрибуте test элементов <xsl:if> и <xsl:when>, атрибуте value элемента <xsl:number> и в предикатах образцов выбора. На этот счет не может быть никаких сомнений: пока вы не знаете XPath, вы не знаете XSLT, и вся эта глава посвящена созданию выражений XPath и работе с ними.

Фактически мы работали с выражениями XPath начиная с главы 1, в которой мы впервые познакомились с атрибутом select в элементах <xsl:apply-templates> и <xsl:value-of>:

<?xml version="1.0"?>

<xsl:stylesheet version="1.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="/PLANETS">

  <HTML>

   <HEAD>

    <TITLE>

     The Planets Table

    </TITLE>

   </HEAD>

   <BODY>

    <H1>

     The Planets Table

    </H1>

    <TABLE BORDER="2">

     <TR>

      <TD>Name</TD>

      <TD>Mass</TD>

      <TD>Radius</TD>

      <TD>Day</TD>

     </TR>

     <xsl:apply-templates/>

    </TABLE>

   </BODY>

  </HTML>

 </xsl:template>

 <xsl:template match="PLANET">

  <TR>

   <TD><xsl:value-of 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="MASS">

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

  <xsl:text> </xsl:text>

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

 </xsl:template>

 <xsl:template match="RADIUS">

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

  <xsl:text> </xsl:text>

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

 </xsl:template>

 <xsl:template match="DAY">

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

  <xsl:text> </xsl:text>

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

 </xsl:template>

</xsl:stylesheet>

Изучаем XPath

Хотя мы уже знаем, например, что для обращения к текущему узлу можно присвоить «.» атрибуту select, «.» не является допустимым образцом выбора: это сокращение XPath для self::node(). Применение образцов выбора ограничено только двумя осями: ребенка и атрибута, но в XPath тринадцать осей, включая self. В этой главе мы рассмотрим все эти оси и приемы работы с ними.

Говоря формально, XPath позволяет вам ссылаться на определенные разделы XML-документов — это язык, предназначенный для адресации различных частей таких документов. При помощи XPath вы указываете, с какой частью документа вы хотите работать. Вот что W3C говорит о XPath: 

«Основная задача XPath — адресовать части документа XML. Для реализации этой первоочередной цели он также предоставляет основные средства оперирования строками, числами и логическими значениями. XPath обладает компактным, отличным от XML синтаксисом для облегчения его применения в идентификаторах URI и значениях атрибутов XML. XPath работает с абстрактной, логической структурой XML-документа, а не с его внешним синтаксисом. XPath получил свое имя благодаря тому, что для навигации по иерархической структуре XML-документа в нем используется нотация пути (path), как в идентификаторах URI».

Эта цитата взята из спецификации XPath 1.0. Заметьте, что, хотя основной целью XPath является адресация частей XML-документов, он также поддерживает синтаксис для работы со строками, числами и логическими (true/false) значениями, который, как мы увидим, сам по себе очень полезен.

В данный момент стандартом является XPath версии 1.0, но были выпущены требования для XPath 2.0. Пока еще нет рабочих проектов XPath 2.0, есть только список того, что W3C планирует туда включить. В конце главы будет приведен обзор этого списка. Первичные источники XPath вы найдете в двух местах:

• спецификация XPath 1.0. XPath применяется для поиска и указания определенных разделов и элементов в документах XML для дальнейшей работы с ними. www.w3.org/TR/xpath;

• требования XPath 2.0. XPath обновляется и в него включаются дополнительные средства поддержки XSLT 2.0 — в первую очередь поддержка схем XML. www.w3.org/TR/xpath20req.

1 ... 56 57 58 59 60 ... 115 ВПЕРЕД
Перейти на страницу:

Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Стивен Холзнер - XSLT, относящееся к жанру Интернет. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.

Комментарии (0)