Применение функции element-available

Для проверки доступности элемента служит функция XSLT 1.0 element-available. В следующем примере я проверяю наличие элемента с названием <starpowder:calculate>:

<xsl:choose xmlns:starpowder='http://www.starpowder.com'>

 <xsl:when test='element-available('starpowder:calculate')'>

  <starpowder:calculate xsl:extension-element-prefixes='starpowder'/>

 </xsl:when>

 <xsl:otherwise>

  <xsl:text>Sorry, can't do math today.</xsl:text>

 </xsl:otherwise>

</xsl:choose>

Есть еще один способ обработать случай отсутствия элемента расширения — элемент <xsl:fallback>.

Элемент <xsl:fallback>

При помощи элемента XSLT 1.0 <xsl:fallback> можно указать, что следует делать в случае отсутствия элемента расширения. Этот элемент заключается в элемент расширения и используется в случае его недоступности.

У элемента <xsl:fallback> нет атрибутов, он содержит тело шаблона.

В следующем примере я создам элемент <xsl:fallback> внутри элемента <redirect:write> из предыдущего примера. В случае отсутствия элемента <redirect:write> элемент <xsl:fallback> прекратит обработку и выдаст сообщение:

<xsl:stylesheet

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

 version='1.0'

 xmlns:lxslt='http://xml.apache.org/xslt'

 xmlns:redirect='org.apache.xalan.lib.Redirect'

 extension-element-prefixes='redirect'>

 <lxslt:component prefix='redirect' elements='write open close' functions=''>

  <lxslt:script lang='javaclass' src='org.apache.xalan.lib.Redirect'/>

 </lxslt:component>

 <xsl:output method='xml'/>

 <xsl:template match='/'>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='PLANETS'>

  <redirect:write select='@file'>

   <PLANETS>

    <xsl:apply-templates/>

   </PLANETS>

   <xsl:fallback>

    <xsl:message terminate='yes'>

     <xsl:text>Could not create multiple output documents.</xsl:text>

    </xsl:message>

   </xsl:fallback>

  </redirect:write>

 </xsl:template>

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

  <xsl:copy>

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

  </xsl:copy>

 </xsl:template>

</xsl:stylesheet>

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

Глава 6

Преобразование в XML, HTML, XHTML, RTF

Предположим, web-узел вашей компании использует основанное на XML программное обеспечение фирмы Commerce One, в котором для безопасной коммуникации через Интернет применяется Java Message Service (JMS). Ваша деятельность была настолько успешной, что вы только что поглотили своего конкурента. К сожалению, для своего узла в Интернете ваш бывший конкурент использует другой основанный на XML продукт, RosettaNet. Как вам теперь преобразовать заказ на покупку xCBL Commerce One, написанный на XML, в заказ на покупку RosettaNet, также написанный на XML, но совершенно на другом диалекте?

Разумеется, применить XSLT. Такого рода XML-XML преобразования становятся все более и более распространенными. Все больше компаний применяют JMS для безопасных коммуникаций через Интернет, и поскольку JMS выполняется в Java, будет разумным связать JMS с основанными на Java процессорами XSLT, такими, как Xalan или Saxon.

В этой книге мы уже рассматривали преобразование XML в HTML, XML и простой текст, но в текущей главе сделаем это более подробно. Мы также рассмотрим здесь новый тип преобразования — из XML в JavaScript. В главе 10 мы познакомимся с преобразованиями из XML в базу данных на основе SQL, а в главе 11 — с преобразованиями из XML в XSL-FO.

Основная задача XSLT состоит не просто в замене одного элемента на другой, но в полной реорганизации содержимого XML-документа. Например, вам может потребоваться реорганизовать planets.xml в терминах плотности планет при помощи XSLT для создания нового XML- документа:

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

<DATA>

 <DENSITY>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

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