<?xml version='1.0'?>

<?xml-stylesheet type='text/xml' href='#stylesheet'?>

<!DOCTYPE PLANETS [

<!ELEMENT PLANET (CUSTOMER)*>

<!ELEMENT CUSTOMER (NAME,MASS,RADIUS,DAY)>

<!ELEMENT NAME (#PCDATA)>

<!ELEMENT MASS (#PCDATA)>

<!ELEMENT RADIUS (#PCDATA)>

<!ELEMENT DAY (#PCDATA)>

<!ATTLIST PLANET

 id ID #REQUIRED>

]>

<PLANETS>

 <PLANET id='favorite'>

 <NAME>Mercury</NAME>

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

 <DAY UNITS='days'>58.65</DAY>

 <RADIUS UNITS='miles'>1516</RADIUS>

 <DENSITY UNITS='(Earth = 1)'>.983</DENSITY>

 <DISTANCE UNITS='million miles'>43.4</DISTANCE><!--B перигелии-- >

</PLANET>

.

.

.

Ряд процессоров XSLT не может осуществлять выбор по ID, потому что они не читают DDS или схему XML. (Возможность доступа к информации ID должна быть включена в XSLT 2.0.) Но есть альтернатива: можно осуществлять выбор по ключу.

ВОЗМОЖНАЯ ПОДДЕРЖКА IDREF

Помимо упрощения работы с ID, в XSLT 2.0 W3C даже рассматривает возможность включения поддержки IDREF. В частности, по заданному ID процессор XSLT может предоставить список всех элементов с атрибутом IDREF или IDREFS, ссылающихся на этот ID. (Заметьте, что сейчас это тоже можно сделать при помощи элемента <xsl:key> и образца 'key()'.)

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

Ключи дают простой способ идентифицировать элементы; конкретные ключи можно выбрать при помощи образца '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>

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

0

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

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