Использование в XSLT других пространств имен (namespace)
Материал из Umicms
Задача: использование в своем шаблоне данных из xml c другим пространством имен (namespace)
Решение:
В качестве примера, получим данные из карты сайта, которая представляет собой валидный xml-документ доступный на сайте по адресу http://домен_сайта/sitemap.xml.
Выберем место в шаблоне, где мы будем выводить полученные данные и вызовим там наш темплейт:
<!-- @name="Пример использования namespace карты сайта http://www.sitemaps.org/schemas/sitemap/0.9"
@path="/modules/data/sitemap_ns.xsl"
-->
<xsl:call-template name="sitemap_ns" />
Создадим по указанному в комментарии пути (/modules/data/) файл sitemap_ns.xsl и подключим его в файле common.xsl:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:include href="properties.xsl" />
<xsl:include href="common-edit-form.xsl" />
<xsl:include href="rss.xsl" />
<xsl:include href="sitemap_ns.xsl" />
</xsl:stylesheet>
Подготовительный этап закончен.
Чтобы использовать другой xml код, мы должны объявить в элементе <xsl:stylesheet> его namespace пространство:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9">
Далее, чтобы добраться до нужного элемента, мы будем везде использовать указанный нами префикс пространства имен:
<xsl:apply-templates select="document('uhttp://dizzy.loc/sitemap.xml')/sitemap:urlset/sitemap:url/sitemap:loc" mode="sitemap_ns" />
Полный пример:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet SYSTEM "ulang://i18n/constants.dtd:file">
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9">
<xsl:template name="sitemap_ns">
<xsl:apply-templates select="document('uhttp://dizzy.loc/sitemap.xml')/sitemap:urlset/sitemap:url/sitemap:loc" mode="sitemap_ns" />
</xsl:template>
<xsl:template match="sitemap:loc" mode="sitemap_ns" >
<textarea><xsl:copy-of select="." /></textarea>
</xsl:template>
</xsl:stylesheet>