Книга: XSLT

Элемент : создание наборов атрибутов

Элемент <xsl:attribute-set>: создание наборов атрибутов

Иногда при создании нового элемента возникает потребность добавить в него сразу несколько атрибутов. Существует простой способ сделать это при помощи элемента <xsl:attribute-set>. У этого элемента два атрибута:

• name (обязательный). Имя набора атрибутов. Устанавливается в QName;

• use-attribute-sets (необязательный). Имена других наборов атрибутов, которые вы хотите включить в этот набор. Устанавливается в список QName, разделенных символами-разделителями.

Элемент <xsl:attribute-set> содержит элементы <xsl:attribute>, по одному для каждого нового создаваемого атрибута. При использовании <xsl:attribute-set> для создания нового набора атрибутов элемента нужно задать имя набору. Затем при создании нового элемента для использования набора атрибутов это имя можно присваивать атрибуту use-attribute-sets элементов <xsl:copy>, <xsl:element>, <xsl:for-each> и даже самого элемента <xsl:attribute-set>.

Ранее в текущей главе мы уже рассматривали один пример применения наборов атрибутов в 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></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">
<P></P>
<input type="BUTTON" value="Venus">
<P></P>
<input type='BUTTON" value="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>

Оглавление книги


Генерация: 1.111. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз