Ну, current()
относится к текущему узлу. :)
<xsl:for-each select="/catalog/cd/artist">
<!-- processes `<artist>` elements - current() always refers to that element --->
</xsl:for-each>
current()
существует для преодоления проблемы, которая .
относится к узлу, на котором работает предикат XPath, и что XPath (из-за своего ограниченного взгляда на мир) не ' У него нет доступа к контексту XSLT.
Это не имеет смысла, потому что <artist_number>
, вероятно, не является потомком <song>
:
<xsl:value-of select="/catalog/cd/song[song_artist_number = ./artist_number]/song_title"/>
Это имеет смысл, потому что <artist_number>
вероятно является дочерним элементом <artist>
:
<xsl:for-each select="/catalog/cd/artist">
<xsl:value-of select="/catalog/cd/song[song_artist_number = current()/artist_number]/song_title"/>
</xsl:for-each>
Несколько вещей в XSLT меняют узел current()
- в особенности <xsl:for-each>
и <xsl:apply-templates>
(но не * 1024) *).
По сути, .
- это концепция XPath. Это относится к разным узлам в разных местах в выражении XPath. current()
- это концепция XSLT. Он ссылается на один узел, пока не изменится контекст обработки программы XSLT. Он также недоступен за пределами XSLT.