2009-12-16

XSLT - напоминалка

Пока не забыл - и потом не искал снова ответы.

Название текущего узла - 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.

2009-12-01

Опять rtorrent

решение то было простое :)
Кривая кодировка и кракозяблы при запуске rtorrent из стартап-скрипта решаются добавлением переменной языка при запуске:

env HOME=/home/rtorrent LC_ALL=ru_RU.UTF-8 /usr/bin/screen -dmS rt /usr/bin/sudo -u rtorrent /usr/bin/rtorrent