<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ксдыщь! &#187; xml</title>
	<atom:link href="http://flack.ru/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://flack.ru</link>
	<description>Вебдев и всякая фигня</description>
	<lastBuildDate>Mon, 06 Apr 2009 16:47:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Генерация URL&#8217;ов в XSLT 1.0</title>
		<link>http://flack.ru/2007/12/13/urls-generation-in-xslt-10/</link>
		<comments>http://flack.ru/2007/12/13/urls-generation-in-xslt-10/#comments</comments>
		<pubDate>Wed, 12 Dec 2007 22:42:34 +0000</pubDate>
		<dc:creator>Flack</dc:creator>
				<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[Рецептарий]]></category>
		<category><![CDATA[urls]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xslt]]></category>

		<guid isPermaLink="false">http://flack.ru/2007/12/13/urls-generation-in-xslt-10/</guid>
		<description><![CDATA[В первой версии XSLT самой слабой, пожалуй, остаётся работа со строками. Наиболее часто проблемы из-за этого возникают с генерацией URL&#8217;ов. Допустим, мы имеем страницу с адресом: http://example.com/index.xml?section=catalog&#38;cat-id=10&#38;item-id=1404&#38;item-unique-key=809124 Нам нужно, скажем, сгенерировать три ссылки: на главную страницу категории (cat-id), главную страницу (section) и независимую от категории страницу итема (item-id, item-unique-key). Способов много, я по-началу даже использовал [...]]]></description>
			<content:encoded><![CDATA[<p>В первой версии XSLT самой слабой, пожалуй, остаётся работа со строками.</p>
<p>Наиболее часто проблемы из-за этого возникают  с генерацией URL&#8217;ов. Допустим, мы имеем страницу с адресом:</p>
<pre><code>http://example.com/index.xml?section=catalog&amp;cat-id=10&amp;item-id=1404&amp;item-unique-key=809124</code></pre>
<p>Нам нужно, скажем, сгенерировать три ссылки: на главную страницу категории (cat-id), главную страницу (section) и независимую от категории страницу итема (item-id, item-unique-key).</p>
<p>Способов много, я по-началу даже использовал substring, но потом ради разнообразия включил моск и набросал небольшой шаблончик. Открытием для хоть сколько-то опытных разработчиков он не будет, так что будем считать это очередным self-note.<span id="more-91"></span></p>
<p>В первую очередь нам нужно надыбать xml с параметрами запроса. В идеале что-то вроде:</p>
<pre><code>&lt;state name="request"&gt;
    &lt;param name="section"&gt;catalog&lt;/param&gt;
    &lt;param name="cat-id"&gt;10&lt;/param&gt;
    &lt;param name="item-id"&gt;1404&lt;/param&gt;
    &lt;param name="item-unique-key"&gt;809124&lt;/param&gt;
&lt;/state&gt;</code></pre>
<p>Готовый вариант стилей будет выглядеть вот так:</p>
<pre><code>&lt;xsl:variable name="request" select="/page/state[@name='request']"/&gt;

&lt;xsl:template match="/"&gt;
    &lt;html&gt;
        &lt;head&gt;
	    &lt;title&gt;Custom page name&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
	    &lt;div id="place-holder"&gt;
		&lt;ul&gt;
		    &lt;li&gt;
			&lt;a&gt;
			    &lt;xsl:attribute name="href"&gt;
				&lt;xsl:apply-templates select="$request"&gt;
				    &lt;xsl:with-param name="exclude-params" select="'item-id|item-unique-key'"/&gt;
				&lt;/xsl:apply-templates&gt;
			    &lt;/xsl:attribute&gt;
			    Ссылка на общую страницу категории
			&lt;/a&gt;
		    &lt;/li&gt;
		    &lt;li&gt;
			&lt;a&gt;
			    &lt;xsl:attribute name="href"&gt;
				&lt;xsl:apply-templates select="$request"&gt;
				    &lt;xsl:with-param name="exclude-params" select="'cat-id'"/&gt;
				&lt;/xsl:apply-templates&gt;
			    &lt;/xsl:attribute&gt;
			    Ссылка на страницу итема, безотносительно категории
			&lt;/a&gt;
		    &lt;/li&gt;
		    &lt;li&gt;
			&lt;a&gt;
			    &lt;xsl:attribute name="href"&gt;
				&lt;xsl:apply-templates select="$request"&gt;
				    &lt;xsl:with-param name="exclude-params" select="'cat-id|item-id|item-unique-key'"/&gt;
				&lt;/xsl:apply-templates&gt;
			    &lt;/xsl:attribute&gt;
			    Ссылка на главную страницу раздела
			&lt;/a&gt;
		    &lt;/li&gt;
		&lt;/ul&gt;
	    &lt;/div&gt;
        &lt;/body&gt;
    &lt;/html&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match="state"&gt;
    &lt;xsl:param name="exclude-params"/&gt;
    &lt;xsl:text&gt;http://example.com/index.xml&lt;/xsl:text&gt;
    &lt;xsl:apply-templates select="param[not(contains($exclude-params,@name))]"/&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match="param[position()=1]"&gt;
    &lt;xsl:text&gt;?&lt;/xsl:text&gt;
    &lt;xsl:value-of select="@name"/&gt;
    &lt;xsl:text&gt;=&lt;/xsl:text&gt;
    &lt;xsl:value-of select="."/&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match="param"&gt;
    &lt;xsl:text&gt;&amp;&lt;/xsl:text&gt;
    &lt;xsl:value-of select="@name"/&gt;
    &lt;xsl:text&gt;=&lt;/xsl:text&gt;
    &lt;xsl:value-of select="."/&gt;
&lt;/xsl:template&gt;</code></pre>
<p>Разберём чуть подробнее:</p>
<pre><code>&lt;xsl:attribute name="href"&gt;
    &lt;xsl:apply-templates select="$request" name="create-url"&gt;
        &lt;xsl:with-param name="exclude-params" select="'cat-id|item-id|item-unique-key'"/&gt;
    &lt;/xsl:apply-templates&gt;
&lt;/xsl:attribute&gt;
</code></pre>
<p>Здесь мы запускаем шаблон для генерации URL&#8217;а, передавая ему, какие параметры не хотим видеть в создаваемом запросе. Если этих параметров в текущем URL&#8217;e нет, ничего страшного не случится.</p>
<p>Ну и, собственно, единственная соль:</p>
<pre><code>&lt;xsl:template match="state"&gt;
    &lt;xsl:param name="exclude-params"/&gt;
    &lt;xsl:text&gt;http://example.com/index.xml&lt;/xsl:text&gt;
    &lt;xsl:apply-templates select="param[not(contains($exclude-params,@name))]"/&gt;
&lt;/xsl:template&gt;</code></pre>
<p>Не матчим те параметры, которые мы передали как исключаемые. Ну и собственно генерируем URL:</p>
<pre><code>&lt;xsl:template match="param"&gt;
    &lt;xsl:text&gt;&amp;&lt;/xsl:text&gt;
    &lt;xsl:value-of select="@name"/&gt;
    &lt;xsl:text&gt;=&lt;/xsl:text&gt;
    &lt;xsl:value-of select="."/&gt;
&lt;/xsl:template&gt;</code></pre>
<p>Исключительно простая штука, которая может сэкономить начинающим кучу времени и нервов. Правда нужно еще xml получать правильный, но про пинание программеров будет в следующий раз :)</p>
<p>Желающие могут заценить исходники: <a href="http://flack.ru/wp-content/uploads/2007/12/index.xml">xml</a>, <a href="http://flack.ru/wp-content/uploads/2007/12/index.xsl">xsl</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://flack.ru/2007/12/13/urls-generation-in-xslt-10/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Комод</title>
		<link>http://flack.ru/2007/09/28/komodo/</link>
		<comments>http://flack.ru/2007/09/28/komodo/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 13:44:00 +0000</pubDate>
		<dc:creator>Flack</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Веб-разработка]]></category>
		<category><![CDATA[komodo]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xslt]]></category>
		<category><![CDATA[редакторы]]></category>

		<guid isPermaLink="false">http://flack.ru/2007/09/28/komodo/</guid>
		<description><![CDATA[Пользуясь случаем, выражаю своё уважение создателям Komodo Edit, который, после перехода на ubuntu, стал моим главным редактором на рабочей машине. Передаю так же, что автокомплит XML/XSL сосет вприсядку по сравнению с Altov&#8217;ой. Надо фигачить. Ну а тому, кто нарисовал темную подсветку синтаксиса, я готов пожертвовать почку. Всем привет.]]></description>
			<content:encoded><![CDATA[<p>Пользуясь случаем, выражаю своё уважение создателям <a href="http://www.activestate.com/Products/komodo_edit/">Komodo Edit</a>, который, после перехода на ubuntu, стал моим главным редактором на рабочей машине.</p>
<p>Передаю так же, что автокомплит XML/XSL сосет вприсядку по сравнению с Altov&#8217;ой. Надо фигачить.</p>
<p>Ну а тому, кто нарисовал темную подсветку синтаксиса, я готов пожертвовать почку.</p>
<p>Всем привет.</p>
]]></content:encoded>
			<wfw:commentRss>http://flack.ru/2007/09/28/komodo/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
