Выбор шаблонов для элементов пространства имен, определенного по умолчанию

We use cookies. Read the Privacy and Cookie Policy

Выбор шаблонов для элементов пространства имен, определенного по умолчанию

Одним из значительных неудобств первой версии XSLT была невозможность сменить пространство имен, определенное по умолчанию для паттернов. То есть, если шаблон будет определен как

<xsl:template match="foo">

 ...

</xsl:template>

то обрабатывать он будет только те элементы foo, которые принадлежат нулевому пространству имен. Для элемента

<bar:foo xmlns:bar="urn:bar-namespace"/>

придется писать шаблон вида

<xsl:template match="ns:foo" xmlns:ns="urn:bar-namespace">

 ...

</xsl:template>

В случае целого документа принадлежащего ненулевому пространству имен, определения подобного рода могут оказаться слишком громоздкими. Решение этой проблемы может быть очень простым и элегантным.

Листинг 12.8. Изменение пространства имен для паттерна

<xsl:stylesheet

 version="2.0"

 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

 xmlns="urn:bar-namespace">

 <xsl:template match="foo">

  ...

 </xsl:template>

</xsl:stylesheet>

В элементе xsl:stylesheet пространство имен с URI "urn:bar-namespace" определяется как пространство имен по умолчанию и паттерн foo соответствует элементу с локальной частью имени "foo" и URI пространства имен "urn:bar-namespace".