Книга: XSLT

Выбор по ID

Выбор по ID

В дополнение к созданию образцов из образцов шага, задающих ось, условие узла и предикат, можно применять и образец id() для выбора элементов с определенным значением ID. Для работы с этим образцом необходимо задать элементам атрибут ID, который должен быть объявлен с типом ID, что можно сделать в DTD или схеме документа. В следующем примере правило добавляет текст всех элементов, имеющих ID "favorite":

<xsl:template match = "id('favorite')">
 <H3><xsl:value-of select="."/></H3>
</xsl:template>

Вот как может выглядеть объявление DTD для planets.xml, в котором объявляется ID и его значение устанавливается в "favorite":

<?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>
 <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()".)

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


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