=> Главная База Знаний Xslt Применение оси self


Применение оси 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. Давайте перейдем к примерам.