пространство имен обратно в правильное в результирующем документе. У элемента два атрибута:
• stylesheet-prefix
(обязательный). Префикс пространства имен, используемый в таблице стилей. Устанавливается в NCName или «#default»;
• result-prefix
(обязательный). Префикс, URI которого вы хотите присвоить пространству имен в результирующем документе. Устанавливается в NCName или «#default».
Следующий пример пояснит сказанное. Представьте, что вам нужно создать такую таблицу стилей:
<?xml version='1.0' encoding='UTF-8'?>
<xsl:stylesheet
xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.1'>
<xsl:template match='PLANET'>
<TR>
<TD>
<xsl:value-of select='NAME'/>
</TD>
<TD>
<xsl:apply-templates select='MASS'/>
</TD>
<TD>
<xsl:apply-templates select='RADIUS'/>
</TD>
<TD>
<xsl:apply-templates select='DAY'/>
</TD>
</TR>
</xsl:template>
</xsl:stylesheet>
Заметьте, что здесь много элементов XSLT с префиксом «xsl», — значит, если вы попытаетесь создать их при помощи XSLT-преобразования, процессор XSLT попытается выполнить эти элементы. Чтобы избежать такой ситуации, я задал им новый префикс пространства имен, «xslt». Ниже показано, как это выглядит в таблице стилей, производящей предыдущую таблицу стилей (листинг 9.4). Заметьте, что нижеследующая таблица стилей просто выбирает корневой элемент исходного документа, чтобы она могла начать работать; она не использует исходный документ ни для каких других целей.
<xsl:stylesheet version='1.1'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:xslt='http://xslt'>
<xsl:template match='/'>
<xslt:stylesheet version='1.1'>
<xslt:template match='PLANET'>
<TR>
<TD><xslt:value-of select='NAME'/></TD>
<TD><xslt:applу-templates select='MASS'/></TD>
<TD><xslt:apply-templates select='RADIUS'/></TD>
<TD><xslt:apply-templates select='DAY'/></TD>
</TR>
</xslt:template>
</xslt:stylesheet>
</xsl:template>
.
.
.
</xsl:stylesheet>
Здесь я использую пространство имен 'http://xslt' для префикса 'xslt', но я смогу изменить его в выходном документе на правильное пространство имен XSLT, 'http://www.w3.org/1999/XSL/Transform', воспользовавшись элементом <xsl:namespace-alias>
:
<xsl:stylesheet version='1.1'
xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
xmlns:xslt='http://xslt'>
<xsl:template match='/'>
<xslt:stylesheet version='1.1'>
<xslt:template match='PLANET'>
<TR>
<TD><xslt:value-of select='NAME'/></TD>
<TD><xslt:applу-templates select='MASS'/></TD>
<TD><xslt:apply-templates select='RADIUS'/></TD>
<TD><xslt:apply-templates select='DAY'/></TD>
</TR>
</xslt:template>
</xslt:stylesheet>
</xsl:template>
<xsl:namespace-alias stylesheet-prefix='xslt' result- prefix='xsl'/>
</xsl:stylesheet>
Вот результат. Заметьте, что здесь все еще используется префикс пространства имен «xslt
», но это пространство имен теперь соответствует правильному пространству имен XSLT:
<?xml version='1.0' encoding='UTF-8'?>
<xslt:stylesheet
xmlns:xslt='http://www.w3.org/1999/XSL/Transform' version='1.1'>
<xslt:template match='PLANET'>
<TR>
<TD>
<xslt:value-of select='NAME'/>
</TD>
<TD>
<xslt:apply-templates select='MASS'/>
</TD>
<TD>
<xslt:applу-templates select='RADIUS'/>
</TD>
<TD>
<xslt:apply-templates select='DAY'/>
</TD>
</TR>
</xslt:template>