Использование в XSLT других пространств имен (namespace)

Материал из Umicms
Перейти к:навигация, поиск

Задача: использование в своем шаблоне данных из xml c другим пространством имен (namespace)

Решение:
В качестве примера, получим данные из карты сайта, которая представляет собой валидный xml-документ доступный на сайте по адресу http://домен_сайта/sitemap.xml.
Sitemap01.png
Выберем место в шаблоне, где мы будем выводить полученные данные и вызовим там наш темплейт:

<!-- @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>

Sitemap02.png