<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF91%3AXSLT</id>
		<title>LXF91:XSLT - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki2.linuxformat.ru/index.php?action=history&amp;feed=atom&amp;title=LXF91%3AXSLT"/>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF91:XSLT&amp;action=history"/>
		<updated>2026-05-13T20:58:01Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.11.1</generator>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF91:XSLT&amp;diff=5670&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Образцы таблиц */</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF91:XSLT&amp;diff=5670&amp;oldid=prev"/>
				<updated>2008-11-28T05:28:02Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Образцы таблиц&lt;/span&gt;&lt;/p&gt;

			&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;col class='diff-marker' /&gt;
			&lt;col class='diff-content' /&gt;
			&lt;tr&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 05:28, 28 ноября 2008&lt;/td&gt;
			&lt;/tr&gt;
		&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 39:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 39:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но эти ленты сделаны большими интернет-парнями. Пример, приведенный на иллюстрации, создан игроком поскромнее:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Но эти ленты сделаны большими интернет-парнями. Пример, приведенный на иллюстрации, создан игроком поскромнее:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;-&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* www.tlc.ac.uk/xml/news-atom.xml.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;* &lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;http://&lt;/ins&gt;www.tlc.ac.uk/xml/news-atom.xml.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF91_xslt1.png| Рис. 1|]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Изображение:LXF91_xslt1.png| Рис. 1|]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki2.linuxformat.ru/index.php?title=LXF91:XSLT&amp;diff=5667&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление</title>
		<link rel="alternate" type="text/html" href="http://wiki2.linuxformat.ru/index.php?title=LXF91:XSLT&amp;diff=5667&amp;oldid=prev"/>
				<updated>2008-11-28T05:26:24Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Изучаем XSLT''' Превращаем RSS, фотоальбомы и многое другое, хранящееся в XML, в удобные web-страницы.&lt;br /&gt;
[[Категория:Учебники]]&lt;br /&gt;
=XSLT: Создадим таблицу стилей=&lt;br /&gt;
&lt;br /&gt;
: Мозги у вас на месте, а как с внешним видом? Умело оформив RSS, вы получите призы в обеих номинациях. А поможет вам в этом '''Рейчел Проберт'''.&lt;br /&gt;
&lt;br /&gt;
RSS – крутая технология, и ее популярность растет с бешеной скоростью. Многие из ваших любимых сайтов уже наверняка обзавелись новостными RSS-лентами, поскольку это упрощает&lt;br /&gt;
и ускоряет распространение слова (или что там они пытаются распространять). Воспользоваться технологией RSS не отказался бы любой&lt;br /&gt;
блоггер или сайтовладелец, но наскоком ею не овладеешь: итог – немало RSS-лент убогого вида, да еще и неудобочитаемых. Чаще всего встречаются два сценария:&lt;br /&gt;
&lt;br /&gt;
* Хочу «одолжить» ленту новостей с чужого сайта, но оформить ее в собственном стиле.&lt;br /&gt;
* Не хочу, чтобы подписчики моей RSS-ленты видели в своих браузерах сырой XML, лучше создать нечто удобное для чтения.&lt;br /&gt;
&lt;br /&gt;
Ответ на оба вопроса дает тема нашего занятия: ''XSLT''.&lt;br /&gt;
&lt;br /&gt;
==Расширенный XML==&lt;br /&gt;
&lt;br /&gt;
Что же такое ''XSLT'', и как мы будем им пользоваться? eXtensible Stylesheet Language Transformation или ''XSLT'' – это язык преобразования одних XML-документов в другие XML-документы. Он является&lt;br /&gt;
подмножеством XSL, языка таблиц стилей XML. На данном уроке мы&lt;br /&gt;
составим на ''XSLT'' таблицу стилей, «подгоняющую» существующую&lt;br /&gt;
RSS-ленту к дизайну вашего сайта. Затем мы применим эту таблицу&lt;br /&gt;
к исходному XML, чтобы пользователи могли просмотреть новости в&lt;br /&gt;
человеко-читаемом виде.&lt;br /&gt;
&lt;br /&gt;
Пользователям ''Firefox 2'' или ''Internet Explorer 7'' (фи) может показаться, что RSS-новости всегда выглядят неплохо. Дело в том, что новейшие браузеры воспроизводят RSS-ленты в удобочитаемом формате (независимо от наличия таблиц стилей в исходном коде), вместо&lt;br /&gt;
бесхитростного отображения XML, как это было в недавнем прошлом.&lt;br /&gt;
Но если у вас другой браузер (или версия), то при отсутствии таблицы&lt;br /&gt;
стилей вы будете иметь несчастье созерцать «сырой» XML. Во врезке&lt;br /&gt;
''«Браузеры и RSS»'' приводится список браузеров, умеющих&lt;br /&gt;
отображать RSS в приличном виде.&lt;br /&gt;
&lt;br /&gt;
==Образцы таблиц==&lt;br /&gt;
&lt;br /&gt;
Есть несколько фантастических примеров стилевых таблиц, в которых&lt;br /&gt;
можно черпать вдохновение. Вот наиболее известные адреса:&lt;br /&gt;
&lt;br /&gt;
* http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml&lt;br /&gt;
* http://feeds.feedburner.com/publisherbuzz&lt;br /&gt;
&lt;br /&gt;
Но эти ленты сделаны большими интернет-парнями. Пример, приведенный на иллюстрации, создан игроком поскромнее:&lt;br /&gt;
* www.tlc.ac.uk/xml/news-atom.xml.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF91_xslt1.png| Рис. 1|]]&lt;br /&gt;
&lt;br /&gt;
'''Не надо громадного бюджета: просто освоим таблицы стилей!'''&lt;br /&gt;
&lt;br /&gt;
==Приступим==&lt;br /&gt;
Наш проект можно разделить на четыре стадии. Мы возьмем RSS-ленту Linux с http://Digg.com, воспользуемся таблицей ''XSLT'', преобразуем Digg XML в элегантный HTML и отобразим его. Для урока вам понадобятся&lt;br /&gt;
некоторые навыки и парочка полезных программ. Прежде всего, позаимствуем на http://www.digg.com ленту новостей о Linux/Unix. Чтобы усвоить&lt;br /&gt;
урок, пригодится знакомство с XML, но честно говоря, оно не обязательно: если вы сумеете разобраться в содержании RSS-файла, проблем не должно быть. Однако прежде чем знакомиться с ''XSLT'', необходимо понять ''XPath''.&lt;br /&gt;
&lt;br /&gt;
''XPath'' для XML – примерно то же, что ''SQL'' для реляционных баз данных. Основная задача ''XPath'' – идентификация частей, или узлов, XML-документа. Рассмотрим следующий пример XML-файла:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;fridge&amp;gt;&lt;br /&gt;
    &amp;lt;fish species=”trout” /&amp;gt;&lt;br /&gt;
    &amp;lt;meat name=”ermintrude” /&amp;gt;&lt;br /&gt;
    &amp;lt;fish name=”nemo” /&amp;gt;&lt;br /&gt;
    &amp;lt;fish&amp;gt;wanda&amp;lt;/fish&amp;gt;&lt;br /&gt;
 &amp;lt;/fridge&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
XPath-эквивалент для выражения ''SELECT fish FROM fridge'' можно&lt;br /&gt;
записать как '''/fridge/fish'''. Подошло бы и '''//fish''', но этот вариант вернет&lt;br /&gt;
всю рыбу, как в холодильнике, так и вне его. У ''XPath'' много общего с&lt;br /&gt;
файловой системой Linux, поэтому знаток командной строки без труда разберется в навигации: '''../''' приведет к узлу, расположенному сразу над текущим ('''./''').&lt;br /&gt;
&lt;br /&gt;
Можно запрашивать XML не только по названию тэга, но и по атрибутам (см. врезку «''Выражения XPath''»). Чтобы выбрать все&lt;br /&gt;
компоненты холодильника, имеющие атрибут '''name''' ('''имя'''), можно воспользоваться выражением '''/fridge/*[@name]'''. Будут возвращены '''Nemo''' и '''Ermintrude''', тогда как '''//fish[@*]''' вернет рыбу, имеющую хоть какой-то&lt;br /&gt;
атрибут (всю, кроме '''Wanda'''). Можно указать '''//fish[@name=”nemo”]''', тогда будет выбрана рыба, атрибут name которой равняется '''Nemo'''.&lt;br /&gt;
&lt;br /&gt;
Итак, ''XPath'' использует «путевые» выражения для выбора узлов&lt;br /&gt;
или групп узлов в XML-документе. Узлы выбираются, следуя указанному пути или шагам.&lt;br /&gt;
&lt;br /&gt;
Для желающих получить более глубокие знания по этой теме, а&lt;br /&gt;
заодно и попрактиковаться, у ''Firefox'' есть замечательный модуль под&lt;br /&gt;
названием ''XPather'' (http://xpath.alephzarro.com). Установив ''XPather'',&lt;br /&gt;
можно загрузить в ''Firefox'' XML-файл, щелкнуть в окне правой кнопкой&lt;br /&gt;
мыши и выбрать в контекстном меню пункт '''Show In XPather''' ('''Открыть в XPather'''). Работая со сложными XML-файлами, вы сможете проверять в ''XPather'', соответствуют ли возвращаемые узлы вашим ожиданиям.&lt;br /&gt;
&lt;br /&gt;
Попробуем реальные примеры. Загрузите http://www.digg.com/rss/indexlinux_unix.xml в ''Firefox'' и откройте исходный код страницы. Скопируйте его в файл на жестком диске, затем откройте этот локальный файл в ''Firefox''. Мы делаем это потому, что последние версии&lt;br /&gt;
''Firefox'' конвертируют RSS в HTML. Локальные файлы не конвертируются, так что откроем окно ''XPather''. Сперва попытаемся найти заголовок RSS-канала. В окне ввода ''XPather'' наберите '''/rss/channel/title''' и нажмите&lt;br /&gt;
кнопку '''Eval''' ('''Вычислить'''). Если все прошло гладко, результатом будет&lt;br /&gt;
следующее значение: «'''Digg/Linux/Unix'''». Теперь испробуем '''//item/title''' – должны возвратиться 40 значений, отображающих заголовки всех статей данной ленты.&lt;br /&gt;
&lt;br /&gt;
Последний шаг перед началом действительно сложной работы – это установка ''xsltproc'', инструмента командной строки для обработки XML-документов с помощью таблиц ''XSLT''. Это часть С-библиотеки ''XSLT''&lt;br /&gt;
для Gnome, способная, впрочем, работать и в отрыве от этого рабочего&lt;br /&gt;
стола. Если ваш дистрибутив использует ''APT'', просто наберите приведенную ниже строку; если нет – обратитесь за инструкциями об установке ПО к менеджеру пакетов своего дистрибутива.&lt;br /&gt;
&lt;br /&gt;
 sudo apt-get install xsltproc&lt;br /&gt;
&lt;br /&gt;
==Охота за контентом==&lt;br /&gt;
&lt;br /&gt;
В конечном итоге, мы будем иметь дело с тремя взаимосвязанными&lt;br /&gt;
файлами: исходным XML, ''XSLT''-таблицей, которую мы собираемся&lt;br /&gt;
создать, и выходным HTML, преобразованным ''xsltproc'' (см. Рис. 2). Первый шаг – определение RSS-ленты, которую мы стилизуем&lt;br /&gt;
под свой сайт. Вы уже знаете, что я выбрала канал Linux/Unix Digg на&lt;br /&gt;
http://www.digg.com/rss/indexlinux_unix.xml.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:LXF91_xslt2.png|Рис. 2]]&lt;br /&gt;
&lt;br /&gt;
'''Волшебник ''xsltproc'' – ну как он это делает?'''&lt;br /&gt;
&lt;br /&gt;
Потратьте некоторое время на изучение исходного XML-файла&lt;br /&gt;
нашей ленты, это пригодится для создания XSLT-таблицы. Если ваш&lt;br /&gt;
браузер воспроизводит ленты в читаемом формате, понадобится&lt;br /&gt;
открыть исходный код выбором пункта контекстного меню '''View Page Source''' ['''Просмотр исходного кода страницы''']. Этот-то файл нас и интересует. Наиболее важная для нас информация разделена на узлы:&lt;br /&gt;
'''канал''' ('''channel'''), '''заголовок''' ('''title''') и '''пункт''' ('''item'''). На данном этапе неплохо бы определить вид нашей страницы новостей. Подумайте, какие части вам хотелось бы включить и как они будут выглядеть.&lt;br /&gt;
&lt;br /&gt;
==Мясо, картошка и лук==&lt;br /&gt;
Держите копию исходного кода RSS-ленты открытой, чтобы можно&lt;br /&gt;
было быстро взглянуть на него в случае необходимости. Теперь войдите в свою рабочую директорию и создайте файл с названием '''digg.xsl'''.&lt;br /&gt;
Откройте этот файл в любым текстовом редакторе, оказавшемся под&lt;br /&gt;
рукой. Я работаю в Kubuntu и пользуюсь ''Kate''… ну, это неважно.&lt;br /&gt;
&lt;br /&gt;
Начнем нашу таблицу так:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:stylesheet version=‘1.0’&lt;br /&gt;
 xmlns:xsl=’http://www.w3.org/1999/XSL/Transform’&lt;br /&gt;
 xmlns:digg=”http://digg.com/docs/diggrss/”&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:output method=”html”/&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:variable name=”title” select=”/rss/channel/title”/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таблица стилей ''XSLT'' начинается с элемента '''&amp;lt;xsl:stylesheet&amp;gt;''' и&lt;br /&gt;
содержит операторы, управляющие воспроизведением. Мы должны&lt;br /&gt;
также включить атрибут '''version=”1.0”'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы работать с элементами и атрибутами ''XSLT'', в начале документа нужно объявить пространство имен ''XSLT'' ('''xmlns'''). Пространство&lt;br /&gt;
имен XML – это метод разрешения конфликтов имен. В RSS есть предопределенные элементы, поэтому издатели вроде iTunes и Digg для&lt;br /&gt;
удобства пользователей расширяют свои RSS-ленты дополнительными тэгами. Объявив пространство имен, мы получаем доступ к расширенным тэгам, образуя выражения объединением пространства имен с&lt;br /&gt;
названием нового тэга через двоеточие (''':'''), например '''digg:title'''. Тэг '''title'''&lt;br /&gt;
входит в пространство имен '''digg''', поэтому он не будет конфликтовать&lt;br /&gt;
с тэгами, заранее определенными в XML-спецификации RSS. Мы начали с '''xmlns:xsl=”http://www.w3.org/1999/XSL/Transform''', что указывает на пространство имен W3C для ''XSLT''.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Скорая помощь&lt;br /&gt;
|Содержание=В мире Linux есть замечательное ПО для работы с XML. Взгляните на IDE ''Treebeard'' по адресу: http://treebeard.sourceforge.net/index.php.&lt;br /&gt;
|Ширина=200px&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
В четвертой строке указан выходной формат '''html:'' ведь мы собрались построить HTML-файл! И последнее. Мы будем обращаться&lt;br /&gt;
к заголовку канала неоднократно, поэтому, для экономии процессорного времени, установим переменную ''title'', доступную в пределах всего нашего кода. Переменная '''title''' получает значение, возвращаемое выражение ''Xpath'', заданное атрибутом '''select (/rss/channel/title)'''. В нашем примере оно равняется Digg/Linux/Unix. Переменные доступны&lt;br /&gt;
по нотации '''$title'''.&lt;br /&gt;
&lt;br /&gt;
Итак, приправив наш документ лучком предписаний, начнем готовить мясо и картошку: элемент '''xsl:template''' ('''template''' – шаблон). Наберите&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xsl:template match=”/”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаблон применяется ко всем узлам, отвечающим выражению ''Xpath'',&lt;br /&gt;
указанному в атрибуте match. Мы создаем HTML-документ, поэтому&lt;br /&gt;
нам понадобится лишь один набор тэгов '''&amp;lt;html&amp;gt;'''. Следовательно, наш&lt;br /&gt;
первый шаблон должен соответствовать только одному узлу. Можно&lt;br /&gt;
было бы использовать любое выражение, возвращающее единственный узел, например '''“/rss”''' или '''“/rss/channel”''', но вернее будет '''“/”''', потому что такой узел грантированно один.&lt;br /&gt;
&lt;br /&gt;
Пора задать разметку HTML-документа. Наберите следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
 &amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;&amp;lt;xsl:value-of select=”$title” /&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Как вы уже заметили, заголовок страницы задается переменной&lt;br /&gt;
'''$title'''. Нотация, которую мы используем для этого – элемент ''XSLT'' '''&amp;lt;xsl:value-of&amp;gt;'''. Элемент '''value-of''' работает как с переменными, так и с выражениями'' XPath''.&lt;br /&gt;
&lt;br /&gt;
Теперь добавьте&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;div style=”width:250px; float:right; padding:10px; margin:10px; border:thin dashed lightgrey;”&amp;gt;&lt;br /&gt;
К чему это все? Это RSS-лента с сайта Digg. Благодаря полученным&lt;br /&gt;
навыкам работы с XSLT, новости с нее читаются и отображаются&lt;br /&gt;
довольно мило.&amp;lt;hr /&amp;gt;Если вы написали собственную RSS-ленту и&lt;br /&gt;
предпочли бы включить ее вместо Diggs, можете использовать&lt;br /&gt;
данный контейнер для описания целевой аудитории и способа&lt;br /&gt;
подписаться на эту ленту.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Возможности стилизации шаблона поистине безграничны. Я поместила в контейнер '''&amp;lt;div&amp;gt;''' пояснения о содержании RSS и придала доку менту некоторый стиль и правила поведения с помощью CSS. Тэг '''&amp;lt;div&amp;gt;''' делит содержание страницы на логические блоки. Я хочу сказать, что '''&amp;lt;div&amp;gt;''' определяет секции, которыми легко управлять, манипулировать, менять их стиль и которые легко читать. Обратите внимание на то, как я стилизовала контейнер '''&amp;lt;div&amp;gt;''', определив его положение, ширину, заполнение, границы и наличие рамки. Для творческого вдохновения, проанализируйте другие CSS.&lt;br /&gt;
&lt;br /&gt;
==Расставим по местам==&lt;br /&gt;
&lt;br /&gt;
Определив раскладку страницы, можно подумать о том, где применить шаблон. Попробуйте набрать следующее:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
   &amp;lt;h1&amp;gt;Welcome to today’s &amp;lt;xsl:value-of select=”$title” /&amp;gt; News&amp;lt;/h1&amp;gt;&lt;br /&gt;
   &amp;lt;xsl:apply-templates select=”rss/channel/item”/&amp;gt;&lt;br /&gt;
   &amp;lt;p&amp;gt;Пока это все, но мы скоро вернемся.&amp;lt;/p&amp;gt;&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
   &amp;lt;/html&amp;gt;&lt;br /&gt;
   &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы опять, как видите, воспользовались элементом '''&amp;lt;xsl:value-of&amp;gt;''', чтобы поместить заголовок на страницу. Затем мы применили элемент '''&amp;lt;xsl:apply-templates&amp;gt;''' для вызова второго шаблона и добавили атрибут '''select:''' он будет обрабатывать лишь те узлы, значения которых соответствуют заданному выражению – в нашем случае это все пункты в канале RSS-ленты, т.е. статьи новостей. Фактически, мы встроили все пункты канала в соответствующую секцию HTML-кода (считайте это функцией отображения). Наконец, чтобы удостовериться в правильности размещения шаблона, мы добавили завершающую часть страницы.&lt;br /&gt;
&lt;br /&gt;
Теперь необходимо задать разметку для узлов '''channel/item''' (ста тей Digg). Так как критерий '''match''' нашего шаблона возвращает группу  узлов (несколько узлов, или статей), шаблон применяется к каждому узлу из этой группы.&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;xsl:template match=”rss/channel/item”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Первым делом нужно создать заголовок статьи, со ссылкой на основной ее текст (для тех, кто захочет прочесть ее целиком). Сделать это не так-то просто:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
   &amp;lt;h2&amp;gt;&lt;br /&gt;
   &amp;lt;xsl:element name=”a”&amp;gt;&lt;br /&gt;
   &amp;lt;xsl:attribute name=”href”&amp;gt;&amp;lt;xsl:value-of select=”./link” /&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
   &amp;lt;xsl:attribute name=”target”&amp;gt;_new&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Выражение '''xsl:element''' служит для создания тэгов средствами ''XSLT''. Уместен вопрос: почему бы не воспользоваться обычными гиперссылками HTML? Дело в том, что наши атрибуты '''href''' создаются динамически, а мы не можем поместить один XML-элемент в другой. Значит, нижеследующая строка просто не сработает:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;a href=”&amp;lt;xsl:value-of select=”./link” /&amp;gt;” target=”_new”&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Элемент '''xsl:attribute''' срабатывает лишь тогда, когда он попадает внутрь '''xsl:element''', и используется для добавления атрибутов к тэгу, который мы конструируем.&lt;br /&gt;
&lt;br /&gt;
У ''XSLT'' есть еще один «туз в рукаве». В русле продуктовой темы, это будет наш десерт. Речь идет об элементе '''xsl:if''', работающем с функцией '''contains()'''. В ''XSLT'' больше сотни встроенных функций, покрывающих почти все ваши нужды. Хотите быть круче – можете встроить расширения с помощью своего любимого языка программирования&lt;br /&gt;
(если процессор ''XSLT'' его поддерживает). Пользуясь '''xsl:if''', давайте&lt;br /&gt;
попробуем сделать вот что: если заголовок статьи Digg содержит слово «Linux», пусть он выводится красным цветом. Добавьте в код следующие строки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:if test=”contains(./title,’Linux’)”&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:attribute name=”style”&amp;gt;color:red;&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:value-of select=”./title” /&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:element&amp;gt;&lt;br /&gt;
  &amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь можно воспользоваться элементом '''&amp;lt;xsl:value-of&amp;gt;''' и выбрать&lt;br /&gt;
интересующие нас узлы:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
  &amp;lt;strong&amp;gt;Published on: &amp;lt;/strong&amp;gt;&amp;lt;xsl:value-of select=”./pubDate”/&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;strong&amp;gt;Number of Diggs: &amp;lt;/strong&amp;gt;&amp;lt;xsl:value-of select=”./dig:diggCount”/&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
  &amp;lt;strong&amp;gt;Number of comments: &amp;lt;/strong&amp;gt;&amp;lt;xsl:value-of select=”./digg:commentCount” /&amp;gt;&lt;br /&gt;
  &amp;lt;p&amp;gt;&amp;lt;xsl:value-of select=”./description” /&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;hr /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на метод обращения к расширенным тэгам &lt;br /&gt;
Digg. Не забывайте закрывать тэги – таблица должна быть аккуратной.&lt;br /&gt;
В конце добавьте&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
  &amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Из RSS в HTML через xsltproc==&lt;br /&gt;
&lt;br /&gt;
Настал момент истины! Таблица выглядит прекрасно, но работает&lt;br /&gt;
ли она? Надеюсь, вы уже установили ''xsltproc'' и готовы запустить ее&lt;br /&gt;
для обработки созданной таблицы и XML-файла Digg. Тогда откройте&lt;br /&gt;
командную строку и вызовите ''xsltproc'', указав название таблицы стилей, а за ним имя файла, к которому нужно применить таблицу. Если&lt;br /&gt;
таблица стилей встроена в XML-документ с помощью соответствующей&lt;br /&gt;
инструкции, название таблицы указывать незачем, ''xsltproc'' автоматически определит и использует ее. По умолчанию, результат выводится в '''stdout''' (стандартный вывод). Файл для вывода можно указать параметром '''-o'''.&lt;br /&gt;
&lt;br /&gt;
Усвоили? Остается набрать следующее:&lt;br /&gt;
&lt;br /&gt;
  xsltproc -o /путь/к/output.htm /путь/к/digg.xsl http://www.digg.com/rss/indexlinux_unix.xml&lt;br /&gt;
&lt;br /&gt;
Если все прошло гладко, дело сделано! Заходите в свою рабочую&lt;br /&gt;
директорию и открывайте файл '''output.htm'''. Вы увидите там чудесно&lt;br /&gt;
оформленную новостную ленту.&lt;br /&gt;
&lt;br /&gt;
Этот простейший шаблон дает лишь понятие о том, как с помощью&lt;br /&gt;
пары элементов и функций ''XSLT'' создать страницу новостей из «позаимствованной» RSS-ленты. Украшать страницу можно и дальше, особенно набравшись опыта работы с CSS. А сейчас пора интегрировать&lt;br /&gt;
файл в ваш сайт и оформить его по собственному вкусу.&lt;br /&gt;
&lt;br /&gt;
Процессоры XSLT существуют во многих языках программирования. Например, чтобы преобразовать XML-файл в ASP.NET с помощью&lt;br /&gt;
''Mono'', можно сделать следующее:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;asp:xml DocumentSource=”rss.xml” TransformSource=”digg.xsl”runat=”server” id=”myNews” /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
О подходящей альтернативе можно справиться в руководстве по&lt;br /&gt;
языку.&lt;br /&gt;
&lt;br /&gt;
{{Врезка&lt;br /&gt;
|Заголовок=Скорая помощь&lt;br /&gt;
|Содержание=HTML-разметка в стилевой таблице XSL должна быть безупречной с точки зрения XML-форматирования. Это означает, что тэги нужно располагать в правильном порядке, обязательно соблюдать регистр названий тэгов, а значения атрибутов заключать в&lt;br /&gt;
кавычки.&lt;br /&gt;
|Ширина=200px&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Оформите свою RSS-ленту==&lt;br /&gt;
&lt;br /&gt;
Но это еще не все. Создав RSS-ленту (например, для своего блога),&lt;br /&gt;
который отображается браузером в виде исходного XML, к ней можно&lt;br /&gt;
добавить таблицу стилей и сделать ее читаемой. Чтобы применить таблицу стилей XSLT к своей ленте, нужно дополнить файл RSS. Введите следующую строку, она укажет браузеру расположение XSL-файла:&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;?xml-stylesheet href=”rss.xsl” type=”text/xsl” media=”screen”?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот и вся необходимая модификация для данного файла.&lt;br /&gt;
&lt;br /&gt;
Итак, мы сделали это! Взяв исходный XML-файл готовой ленты,&lt;br /&gt;
мы преобразовали его с помощью таблицы ''XSLT'', чтобы его можно&lt;br /&gt;
было встроить в сайт. А еще мы воспользовались новообретенными&lt;br /&gt;
навыками, чтобы присоединить стилевую таблицу к XML-файлу, подготовленному для распространения. Два в одном! Все большее количество браузеров получают поддержку RSS, и недалек тот день, когда&lt;br /&gt;
необходимость в ''XSLT'' полностью отпадет. А пока этого не случилось,&lt;br /&gt;
минимум усилий может существенно облегчить жизнь пользователям&lt;br /&gt;
''Internet Explorer 6'' и ''Opera''.&lt;br /&gt;
&lt;br /&gt;
''XSLT'' не привязан к RSS, его можно применить к любому XML-файлу. Например, ''Picasa'' от Google поддерживает экспорт фотоальбома в формате XML. С вашим новым опытом нетрудно преобразовать этот&lt;br /&gt;
XML в Интернет-фотоальбом! '''LXF'''&lt;br /&gt;
&lt;br /&gt;
==Выражения XPath==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Выражение &lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
| имяузла &lt;br /&gt;
| Выбирает все дочерние узлы указанного узла.&lt;br /&gt;
|-&lt;br /&gt;
| / &lt;br /&gt;
| Выбирает корневой узел.&lt;br /&gt;
|-&lt;br /&gt;
| // &lt;br /&gt;
| Выбирает все узлы документа, соответствующие заданному критерию, независимо от их местонахождения.&lt;br /&gt;
|-&lt;br /&gt;
| . &lt;br /&gt;
| Выбирает текущий узел.&lt;br /&gt;
|-&lt;br /&gt;
| .. &lt;br /&gt;
| Выбирает родительский узел текущего узла.&lt;br /&gt;
|-&lt;br /&gt;
| @ &lt;br /&gt;
| Выбирает атрибуты.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Браузеры и RSS==&lt;br /&gt;
&lt;br /&gt;
Таблица показывает, как разные браузеры воспроизводят RSS, то есть какие не делают ничего и&lt;br /&gt;
показывают исходный код XML, какие используют таблицу стилей ленты, а какие подавляют&lt;br /&gt;
функции таблицы стилей собственным процессором. В настоящее время не существует браузера,&lt;br /&gt;
который бы пользовался своим процессором лишь при отсутствии таблицы стилей. Если у вас&lt;br /&gt;
''Internet Explorer 7'' или ''Firefox 2'', рекомендую дополнительно обзавестись одним из тех браузеров,&lt;br /&gt;
которые «уважают» таблицы, не подавляя их.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Браузер&lt;br /&gt;
! Бездействие&lt;br /&gt;
! Таблица&lt;br /&gt;
! Подавление&lt;br /&gt;
|-&lt;br /&gt;
| IE 7&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| IE 6&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pre-IE 6&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 2&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Firefox 1.5&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pre-Firefox 1.5&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Opera 9&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| pre-Opera 9&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Konqueror&lt;br /&gt;
| &amp;lt;center&amp;gt;X&amp;lt;/center&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>