Название текущего узла - name()
Например так:
<xsl:for-each select="tags">
<span id="{name()}>
<xsl:value-of select="."/>
</span>
</xsl:for-each>
Часто используемые таблицы пихаем в переменные (ускоряет работу):
<xsl:variable name="doctypes" select="/doc/types" />
А потом обращаемся по мере необходимости:
<span title="{ $doctypes/dtype[@id=current()/@dtype]/@descr }">
<xsl:apply-templates select="." mode="single"/>
<b><xsl:value-of select="@dtype"/></b>
</span>
Даже ещё лучше - есть же key() - во как:
<xsl:key name="dtypes" match="/doc/types" use="@id" />
<span title="{ key('dtypes',@dtype)/@descr }">
<xsl:apply-templates select="." mode="single"/>
<b><xsl:value-of select="@dtype"/></b>
</span>
Кстати, именно так обращаемся к текущему выбранному узлу: current()/ (а не ./) при выборке из "чужой" таблицы..
Чтобы не было конструкций вида:
<xsl:variable name="id" value="@id" />
<xsl:value-of select="//help[@id=$id]" />
Хватит такого:
<xsl:value-of select="//help[@id=current()/@id]" />
И ещё. Раньше были трудности :)
value-of выбирает только текст. Чтобы выбрать все внутренности (со всеми дочерними нодами) - надо делать copy-of.
Комментариев нет:
Отправить комментарий