JavaScript при создании шаблона. В том примере я при помощи набора атрибутов задавал все атрибуты HTML-кнопок планет и затем создавал их, используя этот набор атрибутов в элементе <xsl:element>:

  <BODY>

   <CENTER>

    <H1>The Mass Page</H1>

   </CENTER>

   <xsl:for-each select='PLANET'>

    <P/>

    <xsl:element name='input' use-attribute-sets='attribs'/>

   </xsl:for-each>

   <P/>

   <P/>

   <DIV ID='display'></DIV>

  </BODY>

 </HTML>

</xsl:template>

<xsl:attribute-set name='attribs'>

 <xsl:attribute name='type'>BUTTON</xsl:attribute>

 <xsl:attribute name='value'><xsl:value-of select='NAME'/></xsl:attribute>

 <xsl:attribute name='onclick'><xsl:value-of select='NAME'/>() </xslt:attribute>

</xsl:attribute-set>

В результирующем документе такой набор атрибутов был добавлен каждой кнопке HTML:

<Р></Р>

<input type='BUTTON'value='Mercury' onclick='Mercury()'>

<P></P>

<input type='BUTTON' value='Venus' onclick='Venus()'>

<P></P>

<input type='BUTTON' value='Earth' onclick='Earth()'>

В листинге 6.11 я воспользуюсь набором атрибутов для нумерации планет в planets.xml. Каждому элементу <PLANET> я добавил два атрибута: number и total. В атрибуте number будет храниться номер планеты начиная с 1, а атрибут total будет содержать общее число планет в planets.xml, которое можно найти при помощи функции count (мы рассмотрим ее в главе 8).

Листинг 6.11. Применение <xsl:attribute-set>

<xsl:stylesheet

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

 <xsl:output method='xml' indent='yes'/>

 <xsl:template match='*'>

  <xsl:copy>

   <xsl:apply-templates/>

  </xsl:copy>

 </xsl:template>

 <xsl:template match='PLANET'>

  <xsl:copy use-attribute-sets='numbering'>

   <xsl:apply-templates/>

  </xsl:copy>

 </xsl:template>

 <xsl:attribute-set name='numbering'>

  <xsl:attribute name='number'><xsl:number/></xsl:attribute>

  <xsl:attribute name='total'><xsl:value-of select='count(//PLANET)'/>

 </xsl:attribute>

</xsl:attribute-set>

</xsl:stylesheet>

Обратите внимание на то, что в результирующем документе каждый элемент <PLANET> имеет атрибуты number и total

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

<PLANET number='1' total='3'>

<NAME>Mercury</NAME> <MASS>.0553</MASS> <DAY>58.65</DAY> <RADIUS>1516</RADIUS> <DENSITY>.983</DENSITY> <DISTANCE>43.4</DISTANCE> </PLANET>

<PLANET number='2' total='3'>

<NAME>Venus</NAME> <MASS>.815</MASS> <DAY>116.75</DAY> <RADIUS>3716</ RADIUS> <DENSITY>.943</DENSITY> <DISTANCE>66.8</DISTANCE> </PLANET>

<PLANET number='3' total='3'> <NAME>Earth</NAME> <MASS>1</MASS> <DAY>1</DAY> <RADIUS>2107</RADIUS> <DENSITY>1</DENSITY> <DISTANCE>128.4</DISTANCE> </PLANET>

</PLANETS>

Пропуск объявления XML и создание фрагментов XML

При знакомстве с XSLT многих смущает объявление XML, которое всегда появляется наверху их результирующих документов, особенно если они не отдают себе отчёт в том, что методом вывода по умолчанию является XML. Разумеется, существует способ избавиться от объявления XML, что может быть полезно при создании хорошо сформированных фрагментов XML, не обязательно являющихся законченными документами. Достаточно только установить атрибут omit-xml-declaration элемента <xsl:output> в «yes»: <xsl:output method='xml' omit-xml-declaration='yes'/>.

В следующем примере я только уберу из документа объявление XML, копируя при этом все остальное. Заметьте, что объявление XML не есть узел, поэтому ничего страшного, если оно будет удовлетворять копирующему шаблону:

<?xml version='1.0'?>

<xsl:stylesheet version='1.0'

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

 <xsl:output method='xml' omit-xml-declaration='yes'/>

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

  <xsl:copy>

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

  </xsl:copy>

 </xsl:template>

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

0

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

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