Вот результат:
<?xml:version='1.0' encoding='UTF-8'?>
<DOCUMENT>
<TITLE>
The Planets
</TITLE>
<PLANETS>
The first three planets are: Mercury, Venus, and Earth.
</PLANETS>
</DOCUMENT>
local-name()
Функция local-name
возвращает локальное (неполное) имя узла. Функция применяется следующим образом:
string local-name(node-set?)
В функцию передается набор узлов с единственным узлом, и функция возвращает локальное имя этого узла. (Если в наборе узлов больше, чем один узел, берется только первый.) Если не передать никаких узлов, функция вернет локальное имя контекстного узла.
В следующем примере я создаю новые элементы при помощи <xsl:element>
и определяю имена контекстных узлов при помощи local-name
:
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:output method='xml'/>
<xsl:template match='PLANETS'>
<xsl:element name='{local-name(.)}'>
<xsl:for-each select='PLANET'>
<xsl:element name='{local-name(.)}'>
<xsl:for-each select='*'>
<xsl:element name='DATA'>
<xsl:value-of select='.'/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
name()
Функция name
аналогична local-name
, за тем исключением, что она возвращает полностью определенное имя узла. Вот как следует применять эту функцию:
string name(node-set?)
namespace-uri()
Функция namespace-uri
возвращает строку, содержащую URI пространства имен в расширенном имени узла. Как правило, это URI в объявлении пространства имен, установленное при помощи атрибутов xmlns
или xmlns:prefix
. Функция применяется следующим образом (заметьте, что эту функцию можно применять только к элементам или атрибутам, результатом обработки остальных узлов будет пустая строка):
string namespace-uri(node-set?)
Например, в planets.xml
я могу добавить пространство имен «star» (звезда):
<?xml version='1.0'?>
<?xml-stylesheet type='text/xml'
href='planets.xsl'?>
<star:PLANETS xmlns:star='http://starpowder.com'>
<star:PLANET>
<star:NAME>Mercury</star:NAME>
<star:MASS UNITS='(Earth = 1)'>.0553</star:MASS>
<star:DAY UNITS='days'>58.65</star:DAY>
<star:RADIUS UNITS='miles'>1516</star:RADIUS>
<star:DENSITY UNITS='(Earth = 1)'>.983</star:DENSITY>
<star:DISTANCE UNITS='million miles'>43.4</star:DISTANCE><!--В перигелии-->
</star:PLANET>
<star:PLANET>
<star:NAME>Venus</star:NAME>
<star:MASS UNITS='(Earth = 1)'>.815</star:MASS>
<star:DAY UNITS='days'>116.75</star:DAY>
<star:RADIUS UNITS='miles'>3716</star:RADIUS>
<star:DENSITY UNITS='(Earth = 1)'>.943</star:DENSITY>
<star:DISTANCE UNITS='million miles'>66.8</star:DISTANCE><!--В перигелии-->
</star:PLANET>
.
.
.
И я могу найти URI этого пространства имен в таблице стилей при помощи namespace- uri
:
<?xml version='1.0'?>
<xsl:stylesheet version='1.0'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:star='http://www.starpowder.com'>
<xsl:template match='/PLANETS'>
<xsl:value-of select='namespace-uri()'/>
</xsl:template>
.