Книга: XSLT
current()
current()
Функция current
возвращает текущий (current) — не контекстный (context) — узел. Контекстный узел шаблона — это узел в выбранном наборе узлов, к которому применяется шаблон. Текущий узел, с другой стороны, это используемый в данный момент узел в таких циклах, как <xsl:for-each>
. Функция возвращает текущий узел как набор узлов с одним узлом:
node-set current()
Обратите внимание: current
нельзя применять в образцах, поскольку образцы должны быть независимы от пути обработки, а способы реализации таких структур, как циклы, в процессорах XSLT могут различаться.
Следующий пример, в котором я выбираю элементы <PLANET>
при помощи шаблона (листинг 8.1), демонстрирует работу функции current
. Внутрь шаблона я поместил элемент <xsl:for-each>
, и шаблон применяется только в том случае, если выбранный шаблоном контекстный узел в то же время является и текущим узлом в очередной итерации в элементе <xsl:for-each>
.
Листинг 8.1. Применение функции current
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<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/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="PLANET">
<xsl:for-each select="/PLANETS/*[.=current()]">
<TR>
<TD><xsl:value-of 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:for-each>
</xsl:template>
<xsl:template match="MASS">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
<xsl:template match="DAY">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
<xsl:value-of select="@UNITS"/>
</xsl:template>
</xsl:stylesheet>
Результат применения этой таблицы стилей будет точно таким же, как если бы элемента <xsl:for-each>
вообще не было, потому что тело элемента <xsl:for-each>
применяется только тогда, когда контекстный узел совпадает с текущим узлом.
- Convection Currents of Information
- Listing Files in the Current Directory with ls
- 1.3.17 Current Sink
- 14.3.2 Pseudo versus True Concurrent Execution
- HKEY_CURRENT_USERSoftwareMicrosoftRAS Phonebook
- НKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlClass{4D36E96D-E325-11CE-BFC1-08002BE10318}000
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRasManParameters
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRasManPPP
- HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRemoteAccessParameters
- CurrentDirectory
- Функция current
- Роль объекта Current