Книга: XSLT

Применение оси self

Применение оси self

Ось self содержит только контекстный узел. В соответствии с одним из сокращений XPath, как мы увидим дальше, вместо «self::node()» можно использовать «.».

Эту ось полезно иметь в виду, поскольку, как вы помните из главы 4, если не задать ось, осью по умолчанию будет child::, а в некоторых случаях вам может понадобиться обратиться к действующему узлу. Например, [self::PLANET] примет значение истины только если контекстным узлом будет элемент <PLANET>.

В следующем примере я объединяю шаблоны для элементов <NAME> и <MASS> в один шаблон. Поскольку у этих элементов разный формат, я должен обращаться с ними по-разному внутри одного и того же шаблона (что можно сделать проверкой значений оси self::NAME, которая возвращает непустой набор узлов, если контекстным, узлом является элемент <NAME>, и self::MASS, возвращающей непустой набор узлов, если контекстным узлом является элемент <MASS>):

<xsl:template match="PLANET">
 <TR>
  <TD><xsl:apply-templates select="NAME"/></TD>
  <TD><xsl:apply-templates select="MASS"/></TD>
  <TD><xsl:apply-templates select="RADIUS"/></TD>
  <TD><xsl:apply-templates select="DAY"/></TD>
 </TR>
</xsl:template>
<xsl:template match="NAME | MASS">
 <xsl:if test="self::NAME">
  <xsl:value-of select="."/>
 </xsl:if>
 <xsl:if test="self::MASS">
  <xsl:value-of select="."/>
  <xsl:text> </xsl:text>
  <xsl:value-of select="@UNITS"/>
 </xsl:if>
</xsl:template>
.
.
.

На этом мы завершаем рассмотрение новых осей XPath. Давайте перейдем к примерам.

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


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