Книга: Технология XSLT

Функции local-name, namespace-uri и name

Функции local-name, namespace-uri и name

string local-name(node-set?)
string namespace-uri(node-set?)
string name(node-set?)

Функция local-name возвращает локальную часть имени первого в порядке просмотра документа узла множества, переданного ей в качестве аргумента. Эта функция выполняется следующим образом.

? Если аргумент опущен, то значением функции по умолчанию является множество, содержащее единственный контекстный узел. Иными словами, функция возвратит локальную часть расширенного имени контекстного узла (если она существует).

? Если аргументом является пустое множество, функция возвращает пустую строку.

? Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, функция возвращает пустую строку.

? В противном случае функция возвращает локальную часть расширенного имени первого в порядке просмотра документа узла переданного множества.

Функция namespace-uri работает совершенно аналогично функции local-name за тем исключением, что возвращает не локальную часть расширенного имени, a URI пространства имен этого узла. Эта функция выполняется следующим образом.

? Если аргумент опущен, его значением по умолчанию является множество, содержащее единственный контекстный узел.

? Если аргументом является пустое множество, функция возвращает пустую строку.

? Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, функция возвращает пустую строку.

? Если первый в порядке просмотра документа узел переданного множества не принадлежит никакому пространству имен, функция возвращает пустую строку.

? В противном случае функция возвращает URI пространства имен первого в порядке просмотра документа узла переданного множества.

Функция name возвратит имя вида QName, которое будет соответствовать расширенному имени первого в порядке просмотра документа узла переданного ей множества.

Это имя должно соответствовать расширенному имени узла, то есть должны совпадать локальные части и пространства имен. Вместе с тем, это вовсе не означает, что префиксы также будут совпадать. Например, если в элементе определены несколько префиксов для одного пространства, функция name может использовать любой из них.

Пример

Для следующего элемента

<a:body
 xmlns:a="http://www.a.com"
 xmlns:b="http://www.a.com"
 xmlns:c="http://www.a.com"/>

функция name может вернуть a:body, b:body или c:body.

Большинство процессоров все же возвращает префикс, с которым узел был объявлен.

Так же как local-name и namespace-uri, функция name имеет следующие особенности использования.

? Если аргумент опущен, то его значением по умолчанию является множество, содержащее единственный контекстный узел.

? Если аргументом является пустое множество, то функция возвращает пустую строку.

? Если первый в порядке просмотра документа узел переданного множества не имеет расширенного имени, то функция возвращает пустую строку.

? В противном случае функция возвращает имя вида QName, соответствующее расширенному имени первого в порядке просмотра документа узла переданного множества.

Пример

Мы можем видоизменить преобразование, приведенное в примере к функциям last и position (листинг 6.7), чтобы генерируемые элементы содержали информацию об имени, пространстве имен и локальной части имени элементов.

Листинг 6.10. Входящий документ

<a:a
 xmlns:a="http://www.a.com"
 xmlns:b="http://www.b.com">
 <b:b>
  <c/>
 </b:b>
</a:a>

Листинг 6.11. Преобразование

<xsl:stylesheet
 version="1.0"
 xmlns:xsl="http: //www.w3.org/1999/XSL/Transform"
 xmlns:a="http://www.a.com"
 xmlns:b="http://www.b.com">
 <xsl:output indent="yes"/>
 <xsl:template match="*">
  <element
   name="{name()}"
   namespace-uri="{namespace-uri()}"
   local-name="{local-name()}">
   <xsl:apply-templates/>
  </element>
 </xsl:template>
</xsl:stylesheet>

Листинг 6.12. Выходящий документ

<element
 xmlns:a="http://www.a.com"
 xmlns:b="http://www.b.com"
 name="a:a"
 namespace-uri="http://www.a.com"
 local-name="a">
 <element name="b:b"
  namespace-uri="http://www.b.com"
  local-name="b">
  <element name="c"
   namespace-uri=""
   local-name="c"/>
 </element>
</element>

Оглавление книги


Генерация: 3.498. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз