Вход/Регистрация
Технология XSLT
вернуться

Валиков Алексей Н.

Шрифт:

 <xsl:template match="user:b">

<B/>

 </xsl:template>

 <xsl:template match="user:input">

<output>

<xsl:apply-templates/>

</output>

 </xsl:template>

</xsl:stylesheet>

Листинг 4.24. Выходящий документ

<output>

 <A/>

 <B/>

</output>

Следует обратить внимание на следующие особенности этого примера.

□ Элементы верхнего уровня в обязательном порядке должны иметь ненулевое пространство имен. Поэтому мы включили элемент

input
и все его дочерние узлы в пространство имен
urn:user
. В листинге 4.23 эти элементы выделены полужирным шрифтом.

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

input
, a
user:input
.

□ Чтобы не выводить объявления пространств имен в выходящем документе, мы включили префикс

user
в атрибут
exclude-result-prefixes
элемента
xsl:stylesheet
.

Как можно видеть, включение элемента

input
как элемента верхнего уровня породило определенные проблемы. Для того чтобы избежать их, можно воспользоваться маленьким фокусом — включать документ не как элемент верхнего уровня, а в элемент верхнего уровня.

Пример

Результат следующего преобразования в точности совпадает с результатом преобразования в предыдущем примере.

Листинг 4.25. Пользовательские данные в элементе верхнего уровня

<xsl:stylesheet

 version="1.0"

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

 <xsl:template name="input">

<input>

<a/>

<b/>

</input>

 </xsl:template>

 <xsl:template match="/">

<xsl:apply-templates

select="document('')/

xsl:stylesheet/xsl:template[@name='input']/input"/>

 </xsl:template>

 <xsl:template match="a">

<A/>

 </xsl:template>

 <xsl:template match="b">

<B/>

 </xsl:template>

 <xsl:template match="input">

<output>

<xsl:apply-templates/>

</output>

 </xsl:template>

</xsl:stylesheet>

Хитрость заключается в том, что мы обрабатываем содержимое именованного шаблона, которое вполне может принадлежать нулевому пространству имен. Единственное, что следует иметь в виду — это то, что этот шаблон не должен конфликтовать с другими шаблонами.

В отличие от предыдущего варианта с преобразованием, включенным в документ, этот способ является гораздо более работоспособным. Минусом его является только то, что на вход все равно должен подаваться какой-нибудь XML-документ, даже если его содержимое и не обрабатывается.

Литеральные элементы результата

Как мы уже видели из множества примеров, преобразования состоят не только из элементов языка XSLT. Например, в шаблоне

<xsl:template match="b">

 <В/>

</xsl:template>

элемент

B
не принадлежит пространству имен XSLT и, следовательно, не считается XSLT-элементом. Такие элементы называются литеральными элементами результата (англ. literal result elements).

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

  • Читать дальше
  • 1
  • ...
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: