xsl:version (версия XSLT, поддерживаемая процессором XSLT), xsl:vendor (производитель процессора XSLT) и xsl:vendor-url (URL производителя процессора XSLT);

• unparsed-entity-uri(). Предоставляет доступ к неразобранным сущностям, объявленным в DTD или схеме, через URI.

В следующих разделах все эти функции рассматриваются подробно и с примерами.

current()

Функция current возвращает текущий (current) — не контекстный (context) — узел. Контекстный узел шаблона — это узел в выбранном наборе узлов, к которому применяется шаблон. Текущий узел, с другой стороны, это используемый в данный момент узел в таких циклах, как <xsl:for- each>. Функция возвращает текущий узел как набор узлов с одним узлом:

node-set current()

Обратите внимание: current нельзя применять в образцах, поскольку образцы должны быть независимы от пути обработки, а способы реализации таких структур, как циклы, в процессорах XSLT могут различаться.

Следующий пример, в котором я выбираю элементы <PLANET> при помощи шаблона (листинг 8.1), демонстрирует работу функции current. Внутрь шаблона я поместил элемент <xsl:for-each>, и шаблон применяется только в том случае, если выбранный шаблоном контекстный узел в то же время является и текущим узлом в очередной итерации в элементе <xsl:for-each>.

Листинг 8.1. Применение функции current

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:template match='/PLANETS'>

  <HTML>

   .

   .

   .

    <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'>

  <xsl:for-each select='/PLANETS/*[.=current()]'>

   <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:for-each>

 </xsl:template>

 <xsl:template match='MASS'>

  <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>

Результат применения этой таблицы стилей будет точно таким же, как если бы элемента <xsl:for-each> вообще не было, потому что тело элемента <xsl:for- each> применяется только тогда, когда контекстный узел совпадает с текущим узлом.

document()

Функция document особенно полезна, потому что с ее помощью можно читать несколько документов и обрабатывать их содержимое. Функция document применяется следующим образом:

node-set document(uri, base-uri?)

Функция принимает параметр uri, который может представлять собой URI читаемого документа или набор узлов, чьи строковые значения задают идентификаторы URI. Второй, необязательный параметр base-uri представляет собой набор узлов, базовый URI которого используется для вычисления всех относительных URI, могущих находиться в параметре uri.

В следующем примере (листинг 8.2) я обрабатываю в процессоре XSLT один документ, planets1.xml, и также считываю и обрабатываю второй документ, planets2.xml. Вот planets1.xml.

Листинг 8.2. planets1.xml

<?xml version='1.0'?>

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

<PLANETS href='planets2.xml'>

</PLANETS>

Вот planets2.xml — в элементе <PLANET> содержится одна планета (листинг 8.3).

Листинг 8.3. planets2.xml
Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату