<xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='PLANETS'>

  <xsl:apply-templates/>

 </xsl:template>

 <xsl:template match='PLANET'>

  <xsl:copy>

   <xsl:apply-templates/>

  </xsl:copy>

 </xsl:template>

 <xsl:template match='NAME'>

  <xsl:copy>

   <xsl:apply-templates/>

  </xsl:copy>

 </xsl:template>

 <xsl:template match='MASS'>

  <xsl:copy>

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

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

  </xsl:copy>

 </xsl:template>

 <xsl:template match='RADIUS'>

 </xsl:template>

 <xsl:template match='DAY'>

 </xsl:template>

 <xsl:template match='DENSITY'>

 </xsl:template>

 <xsl:template match='DISTANCE'>

 </xsl:template>

</xsl:stylesheet>

А вот результирующий документ (отметьте, что я сохранил только элементы <NAME> и <MASS>):

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

<PLANET>

 <NAME>Mercury</NAME>

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

</PLANET>

<PLANET>

 <NAME>Venus</NAME>

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

</PLANET>

<PLANET>

 <NAME>Earth</NAME>

 <MASS>1(Earth = 1)</MASS>

</PLANET>

Таким способом можно фильтровать XML-документы, создавая новые XML-документы только с требуемыми данными.

Разрешение конфликтов шаблонов

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

У каждого шаблона есть приоритет по умолчанию, основанный на значении атрибута select. Как правило, чем более сужающим является правило выбора или выражение (например, 'PLANET' и '*'), тем выше его приоритет. В главе 4 мы рассмотрим, как процессор определяет приоритеты и как он работает с шаблонами, имеющими одинаковый приоритет.

Приоритет шаблона можно установить при помощи атрибута priority. В приведенном ниже листинге 3.8 правило, созданное элементом <xsl:template priority='1'/>, имеет меньший приоритет, чем правило, созданное элементом <xsl:template priority='2'/>.

Листинг 3.8. Установка приоритета шаблона

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

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

0

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

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