Книга: XSLT

key()

key()

Функция key служит для поиска узлов с определенным значением по именованному ключу, ее следует применять следующим образом:

node-set key(name, value)

Функции передаются имя ключа name в виде строки и требуемое значение ключа value, которое нужно найти. Функция возвращает набор узлов из найденных узлов.

Ключи создаются при помощи элемента <xsl:key>. Мы уже видели следующий пример в главе 4 — здесь я при помощи ключей выбираю планеты, чей атрибут 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>

Теперь при помощи <xsl:key> я могу создать ключ 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>
   .
   .
   .
    <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>
 .
 .
 .

И вот результат — как видите, единственной планетой, удовлетворившей образцу, была Земля:

<HTML>
 <НЕАD>
  <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>

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


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