Предпочтительным подходом является использование оси self
, поскольку она позаботится о пространствах имен и будет более краткой.
Обратите внимание, однако, что если ваш текущий узел не узел элемента, ось self
не будет работать так, как вы ожидаете. Например, в
<xsl:template match="processing-instruction()">
<xsl:if test="self::workdir">
...
</xsl:if>
</xsl:template>
Проверка никогда не будет успешной, даже если текущая инструкция обработки имеет имя workdir
. То же самое относится и к более распространенному случаю
<xsl:template match="@*">
<xsl:if test="self::href">
...
</xsl:if>
</xsl:template>
Опять же, тест для атрибута href
никогда не будет работать, так как тип узла принцип для оси self
является элементом . В этом случае вы должны использовать name()
или local-name()
<xsl:template match="@*">
<xsl:if test="name() = 'href'">
...
</xsl:if>
</xsl:template>