Kniga-Online.club

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

Читать бесплатно Стивен Холзнер - XSLT. Жанр: Интернет издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 <xsl:key name="NAME" match="PLANET" use="NAME"/>

 <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 select="key('NAME', 'Sister Planet')"/>

    </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="DAY">

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

  <xsl:text> </xsl:text>

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

 </xsl:template>

</xsl:stylesheet>

И вот результирующий документ:

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

   <TR>

    <TD>Mercury</TD>

    <TD>.0553 (Earth = 1)</TD>

    <TD>1516 miles</TD>

    <TD>58.65 days</TD>

   </TR>

   <TR>

    <TD>Venus</TD>

    <TD>.815 (Earth = 1)</TD>

    <TD>3716 miles</TD>

    <TD>116.75 days</TD>

   </TR>

  </TABLE>

 </BODY>

</HTML>

Элемент <xsl:document>: создание нескольких результирующих документов

Весьма часто во время преобразования требуется создать несколько результирующих документов. Например, вам может понадобиться создать отчет о прохождении преобразования или разделить входной документ на несколько результирующих документов (например, разбить рассказ на главы). Или же вам может быть нужно создать набор результирующих документов, которые будут использоваться (как при создании кадрового (frameset) документа HTML) совместно с двумя документами, отображаемыми во фреймах.

Создание нескольких результирующих документов настолько распространенная задача, что практически все процессоры XSLT позволяют вам это сделать, даже в XSLT 1.0, где отсутствуют необходимые для этого средства. Процессоры XSLT добавляют для этого новые элементы расширения. Например, Xalan предоставляет элемент <write>, позволяющий написать новый результирующий документ. Для работы с этим элементом нужно создать новый префикс пространства имен — здесь я использую «xalan» — которое Xalan использует для элемента, «com.lotus.xsl.extensions.Redirect», и указать, что этот новый префикс является префиксом элемента расширения:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 xmlns:xalan="com.lotus.xsl.extensions.Redirect"

 extension-element-prefixes="xalan">

 .

 .

 .

Теперь при помощи атрибута file элемента <xalan:write> можно записать новый файл:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 xmlns:xalan="com.lotus.xsl.extensions.Redirect"

 extension-element-prefixes="xalan">

 .

 .

 .

 <xalan:write file="newdoc.txt">

  <xsl:text>Here's some text.</xsl:text>

 </xalan:write>

В процессоре Saxon применяйте элемент <output>. Для этого элемента я использую префикс «saxon», который соответствует URI «http://icl.com/saxon»:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 xmlns:saxon="http://icl.com/saxon"

 extension-element-prefixes="saxon">

 .

 .

 .

 <saxon:output file="newdoc.txt">

  <xsl:text>Here's some text.</xsl:text>

 </saxon:output>

To же можно сделать и в XT; в этом случае используйте пространство имен <http://www.jclark.com/xt» с элементом <document> и атрибут href для задания имени нового файла:

<?xml version="1.0"?>

<xsl:stylesheet version="1.1"

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

 xmlns:xt="http://www.jclark.com/xt"

 extension-element-prefixes="xt">

 .

 .

 .

 <xt:document href="newdoc.txt">

  <xsl:text>Here's some text.</xsl:text>

 </xt:document>

Все это создало весьма запутанную ситуацию, поскольку каждый разрабатывал свои собственные решения. По этой причине в XSLT 1.1 для поддержки нескольких результирующих документов был представлен новый элемент, <xsl:document>, со следующими атрибутами:

• href (обязательный). Показывает, где будет помещен новый документ. Устанавливается в абсолютный или относительный URI, без идентификатора фрагмента;

• method (необязательный). Определяет метод вывода, используемый для создания результирующего документа. Устанавливается в «xml», «html», «text» или QName, не являющееся NCName;

• version (необязательный). Определяет версию выходного документа. Устанавливается в NMTOKEN;

• encoding (необязательный). Устанавливает кодировку выходного документа. Устанавливается в строку;

• omit-xml-declaration (необязательный). Устанавливается в «yes» или «no», чтобы опустить объявление XML или не отпускать;

• cdata-section-elements (необязательный). Задает имена тех элементов, чье содержимое нужно вывести как разделы CDATA. Устанавливается в список QName, разделенных символами-разделителями;

• doctype-public (необязательный). Задает открытый идентификатор, который будет использован в объявлении <!DOCTYPE> вывода. Устанавливается в строковое значение;

• doctype-system (необязательный). Задает системный идентификатор, который будет использован в объявлении <!DOCTYPE> вывода. Устанавливается в строковое значение;

• indent (необязательный). Определяет, будет ли выходной документ выровнен для отображения структуры вложенности. Устанавливается в «yes» или «no»;

• media-type (необязательный). Устанавливает тип MIME вывода. Устанавливается в строковое значение;

• standalone (необязательный). Определяет, будет ли отдельное объявление включено в выходные данные, и если да, устанавливает его значение. Устанавливается в «yes» или «no».

Этот элемент содержит тело шаблона.

Следующий пример основан на упрощенной таблице стилей. В этом случае я создал в HTML-документе две рамки (frame), а также два HTML-документа для отображения в этих рамках (frame1.html и frame2.html). Первую рамку и ее документ я создал следующим образом:

<HTML>

 <HEAD>

  <TITLE>

   Two Frames

  </TITLE>

 </HEAD>

 <FRAMESET cols="50%, 50%">

  <FRAME src="frame1.html"/>

  <xsl:document href="frame1.html">

   <HTML>

    <HEAD>

     <TITLE>

      Frame 1

     </TITLE>

    </HEAD>

    <BODY>

     <H1>This is frame 1.</H1>

    </BODY>

   </HTML>

  </xsl:document>

  .

  .

  .

Затем я могу создать вторую рамку и ее документ:

<HTML>

 <HEAD>

  <TITLE>

   Two Frames

  </TITLE>

 </HEAD>

 <FRAMESET cols="50%, 50%">

  <FRAME src="frame1.html"/>

  <xsl:document href="frame1.html">

   <HTML>

    <HEAD>

     <TITLE>

      Frame 1

     </TITLE>

Перейти на страницу:

Стивен Холзнер читать все книги автора по порядку

Стивен Холзнер - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


XSLT отзывы

Отзывы читателей о книге XSLT, автор: Стивен Холзнер. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*