Книга: XSLT

Выбор по ключу

Выбор по ключу

Ключи дают простой способ идентифицировать элементы; конкретные ключи можно выбрать при помощи образца "key()". Работа с ключами подробно обсуждается в главе 9, но здесь я также приведу небольшой пример.

Для создания ключа служит элемент <xsl:key>. Это элемент верхнего уровня, поэтому он используется вне шаблонов и как дочерний элемент <xsl:stylesheet>. В следующем примере я при помощи ключа выбираю планеты, чей атрибут COLOR (цвет) установлен в "BLUE" (голубой), что означает Землю:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xml" href="planets.xsl"?>
<PLANETS>
 .
 .
 .
 <PLANET COLOR="BLUE">
  <NAME>Earth</NAME>
  <MASS UNITS="(Earth = 1)">1</MASS>
  <DAY UNITS="days">1</DAY>
  <RADIUS UNITS="miles">2107</RADIUS>
  <DENSITY UNITS="(Earth = 1)">1</DENSITY>
  <DISTANCE UNITS="million miles">128.4</DISTANCE><!--"B перигелии-->
 </PLANET>
</PLANETS>

Теперь я могу создать ключ с именем COLOR, который выбирает элементы <PLANET>, проверяя их атрибут COLOR:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http.//www.w3.org/1999/XSL/Transform">
 <xsl:key name="COLOR" match="PLANET" use="@COLOR"/>
 .
 .
 .

Теперь при помощи образца "key()" можно выбрать элементы <PLANET> с атрибутом COLOR со значением "BLUE":

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:key name="COLOR" match="PLANET" use="@COLOR"/>
 <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 select="key('COLOR', 'BLUE')"/>
    </TABLE>
   </BODY>
  </HTML>
 </xsl:template>
 .
 .
 .

А вот результат — как видите, единственной планетой, удовлетворявшей используемому образцу, была Земля (Earth).

<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>
   <TR>
    <TD>Earth</TD>
    <TD>1 (Earth = 1)</TD>
    <TD>2107 miles</TD>
    <TD>1 days</TD>
   </TR>
  </TABLE>
 </BODY>
</HTML>

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


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