пространство имен обратно в правильное в результирующем документе. У элемента два атрибута:

• 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). Заметьте, что нижеследующая таблица стилей просто выбирает корневой элемент исходного документа, чтобы она могла начать работать; она не использует исходный документ ни для каких других целей.

Листинг 9.4. Применение <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: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>

Вы читаете XSLT
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату