<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=8477</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=8477&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «XML/XSL: Обработка всех текстовых узлов всех тегов».]]></description>
		<lastBuildDate>Tue, 06 Aug 2013 08:22:14 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74243#p74243</link>
			<description><![CDATA[<p>Не-не-не. Сохранить пробелы в текстовых нодах можно и проще, моя задача как раз была в получении &quot;канонического&quot; вида XML. Я просто об этом предупредил. Да и пробелы в них не только убираются, но и добавляются - отступ.</p><p>Поправлю сам себя: оказывается, свойство encoding сохраняется только в моей несчастной винде (пора переустанавливать). Ни в какой другой (даже у меня же на работе) не сохраняется. По всей видимости, получить исходную кодировку XML файла, после того, как он загружен в DOM, низзя. Прийдётся сначала парсить файл, как текст, а уж потом грузить...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 06 Aug 2013 08:22:14 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74243#p74243</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74233#p74233</link>
			<description><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Шаблон форматирует XML, хотя, строго говоря, &quot;портит&quot; текстовые ноды, вольно обращаясь с их пробелами... И&nbsp; может добавить новые, например, если исходный файл был однострочником.</p></blockquote></div><p>Попробуйте посмотреть в сторону атрибута <strong>xml:space=&quot;preserve&quot;</strong> в исходном XML или на элемент <strong>&lt;xsl:preserve-space&gt;</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (shiz)]]></author>
			<pubDate>Mon, 05 Aug 2013 23:08:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74233#p74233</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74209#p74209</link>
			<description><![CDATA[<p>Пожалуй, вопрос не в тему, но, может, название темы сменить на что-то более общее? Если нет - перенесу в отдельную...<br />И так. В начале XML есть инструкция &lt;?xml version=&quot;1.0&quot; encoding=&quot;...&quot;?&gt;. При загрузке (load) в MSXML2.DOMDocument эта инструкция сохраняется, включая encoding и его значение, хотя сам XML, насколько я понял, в xmlдомике находится в UTF-16 (кажется, LE). Проверил просто: сохранил xmlDoc не родным save(), а с помощью fso.textFile.write(xmlDoc.xml). Далее. У xsl:output тоже есть свойство encoding, которое задаёт выходную кодировку в том же формате. Вопрос:<br />Уважаемые коллеги, нельзя ли вставить значение свойства xsl:output encoding из инструкции исходного xml файла (чтобы выходная кодировка соответствовала входной)?</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sun, 04 Aug 2013 21:40:59 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74209#p74209</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74195#p74195</link>
			<description><![CDATA[<p>Вроде, получилось. Хотя, возможно, не слишком изящно.</p><div class="codebox"><pre><code>&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
  &lt;xsl:output method=&quot;xml&quot; indent=&quot;yes&quot;/&gt;

  &lt;xsl:template match=&quot;*&quot;&gt;
  &lt;!-- для тэгов --&gt;
    &lt;xsl:param name=&quot;indent&quot; select=&quot;&#039;&amp;#10;&#039;&quot;/&gt;
    &lt;!-- задали параметр — начальный отступ (сначала это перенос строки) --&gt;

    &lt;xsl:value-of select=&quot;$indent&quot;/&gt;
    &lt;!-- применили отступ перед тэгом --&gt;
    &lt;xsl:copy&gt;
    &lt;!-- копируем содержимое тэга (сам тэг — автоматически?) --&gt;
      &lt;xsl:copy-of select=&quot;@*&quot; /&gt;
      &lt;!-- атрибуты — как есть --&gt;

      &lt;xsl:apply-templates&gt;
      &lt;!-- рекурсия --&gt;
        &lt;xsl:with-param name=&quot;indent&quot; select=&quot;concat($indent, &#039;    &#039;)&quot;/&gt;
        &lt;!-- вложенные тэги — с новым значением отступа (+«табуляция») --&gt;
      &lt;/xsl:apply-templates&gt;

      &lt;xsl:choose&gt;
        &lt;xsl:when test=&quot;*&quot;&gt;
        &lt;!-- если были вложенные тэги --&gt;
          &lt;xsl:value-of select=&quot;$indent&quot;/&gt;
          &lt;!-- подвинуть закрывающий тэг (здесь отступ не увеличен) --&gt;
        &lt;/xsl:when&gt;
        &lt;xsl:otherwise&gt;
        &lt;!-- если не было — закрывающий в той же строке, что и открывающий --&gt;
          &lt;xsl:text&gt;&lt;/xsl:text&gt;
          &lt;!-- чушь, но иначе всё равно переносит строку --&gt;
        &lt;/xsl:otherwise&gt;
      &lt;/xsl:choose&gt;

    &lt;/xsl:copy&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;comment()|processing-instruction()&quot;&gt;
  &lt;!-- для комментариев и инструкций процессора --&gt;
    &lt;xsl:param name=&quot;indent&quot; select=&quot;&#039;&#039;&quot;/&gt;
    &lt;!-- задаём пустой параметр, всё равно будет передан правильный (with-param) --&gt;
    &lt;xsl:value-of select=&quot;$indent&quot;/&gt;
    &lt;!-- отступ --&gt;
    &lt;xsl:copy /&gt;
    &lt;!-- просто копируем (с отступом) --&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;text()&quot;&gt;
  &lt;!-- для текстовых узлов --&gt;
    &lt;xsl:param name=&quot;indent&quot; select=&quot;&#039;&#039;&quot;/&gt;
    &lt;!-- задаём пустой (см. выше) --&gt;
    &lt;xsl:value-of select=&quot;$indent&quot;/&gt;
    &lt;!-- отступ --&gt;
    &lt;xsl:if test=&quot;normalize-space()!=&#039;&#039;&quot;&gt;
    &lt;!-- если не пустой --&gt;
      &lt;xsl:copy-of select=&quot;normalize-space()&quot; /&gt;
      &lt;!-- копируем содержимое с нормализованными прбелами --&gt;
    &lt;/xsl:if&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></div><p>Шаблон форматирует XML, хотя, строго говоря, &quot;портит&quot; текстовые ноды, вольно обращаясь с их пробелами... И&nbsp; может добавить новые, например, если исходный файл был однострочником.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sun, 04 Aug 2013 02:47:27 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74195#p74195</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=74055#p74055</link>
			<description><![CDATA[<p>Поигрался со свойством indent элемента xsl:output и ничего не понял. Похоже, в микрософтовой реализации оно игнорируется. Для методов text и html переноса на новую строку нет ни при &quot;yes&quot;, ни при &quot;no&quot;, для xml - вообще непонятно, часть тэгов переносится и при &quot;no&quot;, а с отступами - беда и при &quot;yes&quot;.</p><p>Пытался с помощью xsl получить исходный xml, но в отформатированном виде, независимо от исходного форматирования. С наскоку не получилось. Видимо, надо пересоздавать узлы (xsl:element), назначая им их же атрибуты. Пока отложил. Пробовал сделать то же методом text - похоже, ещё сложнее (отступы съедаются).</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 27 Jul 2013 20:53:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=74055#p74055</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73994#p73994</link>
			<description><![CDATA[<p>Нашел <a href="http://msdn.microsoft.com/ru-ru/library/vstudio/ms256190(v=vs.90).aspx">здесь</a>.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Mon, 22 Jul 2013 20:19:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73994#p73994</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73993#p73993</link>
			<description><![CDATA[<p>Вы можете вставить в любой XML файл как сами символы, так и указать их код, в виде <strong>&amp;#число;</strong>. А комбинации вида <strong>&amp;что-то;</strong> - это сущности, которые должны быть определены где-то заранее. Есть предопределенный набор сущностей вида <strong>&amp;lt;</strong>. Поэтому Вы можете их использовать - остальные надо определять самим.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 22 Jul 2013 19:44:14 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73993#p73993</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73955#p73955</link>
			<description><![CDATA[<p>Кавычки и прочие символы можно вставлять как символы, благо UTF-8 позволяет (например, из Таблицы символов). Я про то, что аналогия не сработала...</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sun, 21 Jul 2013 16:28:03 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73955#p73955</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73907#p73907</link>
			<description><![CDATA[<p><a href="http://ru.wikipedia.org/wiki/DTD">DTD (wiki)</a><br /><a href="http://www.w3schools.com/dtd/default.asp">DTD</a></p><p>XML не знают, что делать с большинством сущностей, потому что они не определены. Используйте коды в форме <strong>&amp;#число;</strong> или опишите их в своем xslt-файле: </p><div class="codebox"><pre><code>&lt;!ENTITY &amp;ldquo; &quot;&amp;#8220;&quot;&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 19 Jul 2013 19:17:05 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73907#p73907</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73906#p73906</link>
			<description><![CDATA[<p>Забавно: обрадовался, было, тому, что XSL понимает такие конструкции, как &amp;lt; и тут же налетел на &amp;ldquo;... С ним XSL вообще считается сплошной ошибкой.</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Fri, 19 Jul 2013 18:27:56 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73906#p73906</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73848#p73848</link>
			<description><![CDATA[<p>Все верно. : )</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 17 Jul 2013 19:29:36 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73848#p73848</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73846#p73846</link>
			<description><![CDATA[<p>Да, normalize-space() в качестве фильтра работает. А вопрос &quot;Правильно?&quot; относился не к коду, а к комментариям... Сам пример не заработать не мог: я двигался от Вашего кода беспроигрышным методом (одно изменение - проверка, если что - откат).</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Wed, 17 Jul 2013 19:21:06 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73846#p73846</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73844#p73844</link>
			<description><![CDATA[<div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p><strong>Rumata</strong>, у Вас талант доходчиво объяснять труднодоходящее.</p></blockquote></div><p>Спасибо. Значит мои преподавательские способности еще не утеряны <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p><div class="quotebox"><cite>Serge Yolkin пишет:</cite><blockquote><p>Вот почти тот же пример (изменения минимальны), комментарии добавил так, как понял. Правильно?</p></blockquote></div><p>Я не проверял Ваш пример. Судя по коду - все верно. Если у Вас работает все верно на любом наборе входных данных, значит правильно. </p><p>Это работает?<br /></p><div class="codebox"><pre><code>&lt;xsl:template match=&quot;text()[normalize-space()]&quot;&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Wed, 17 Jul 2013 18:53:23 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73844#p73844</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73825#p73825</link>
			<description><![CDATA[<p><strong>Rumata</strong>, у Вас талант доходчиво объяснять труднодоходящее.<br />Вот почти тот же пример (изменения минимальны), комментарии добавил так, как понял. Правильно?</p><div class="codebox"><pre><code>&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

  &lt;xsl:output method=&quot;html&quot; version=&quot;1.0&quot; indent=&quot;yes&quot; /&gt;
  &lt;!-- формат выходных данных - html-документ, начиная каждый тег с новой строки --&gt;

  &lt;xsl:template match=&quot;/&quot;&gt;
  &lt;!-- для корня - чтобы 1 раз --&gt;
    &lt;style&gt;
      .sn{color:navy;font-weight:bold}
      .sa{color:crimson;}
      .st{color:blue;}
      ul{list-style-type:none;margin:0;}
      li,ul ul{margin:3px 0 0 10px;}
    &lt;/style&gt;
    &lt;!-- прописали в начале --&gt;
    &lt;xsl:apply-templates /&gt;
    &lt;!-- и корень же - на дальнейшую обработку --&gt;
    &lt;br /&gt;
    &lt;!-- один раз в конце --&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;*&quot;&gt;
    &lt;!-- для каждого узла --&gt;
    &lt;ul&gt;
      &lt;span class=&quot;sn&quot;&gt;&amp;lt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&amp;gt;&lt;/span&gt;
      &lt;!-- сразу выводим имя узла --&gt;
      &lt;xsl:apply-templates select=&quot;@*&quot; /&gt;
      &lt;!-- на дальнейшую обработку: все атрибуты --&gt;
      &lt;xsl:apply-templates select=&quot;text()&quot; /&gt;
      &lt;!-- на дальнейшую обработку: все текстовые ноды --&gt;
      &lt;xsl:apply-templates select=&quot;*&quot; /&gt;
      &lt;!-- на дальнейшую обработку: все дочерние узлы - рекурсия --&gt;
    &lt;/ul&gt;
    &lt;!-- результат обработки вернётся туда, откуда был вызван, т.е. --&gt;
    &lt;!-- окажется между тэгами &lt;ul&gt; и &lt;/ul&gt;, и это рекурсивно --&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;@*&quot;&gt;
    &lt;!-- для каждого атрибута --&gt;
    &lt;li&gt;
      &lt;span class=&quot;sa&quot;&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;=“&lt;/span&gt;
      &lt;!-- выводим имя= --&gt;
      &lt;span class=&quot;sv&quot;&gt;&lt;xsl:value-of select=&quot;.&quot; /&gt;&lt;/span&gt;
      &lt;!-- выводим значение --&gt;
      &lt;span class=&quot;sa&quot;&gt;”&lt;/span&gt;
    &lt;/li&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match=&quot;text()[normalize-space()]&quot;&gt;
    &lt;!-- для каждой непустой текстовой ноды --&gt;
    &lt;li&gt;
      &lt;span class=&quot;st&quot;&gt;[Текст] “&lt;/span&gt;
      &lt;span class=&quot;sv&quot;&gt;&lt;xsl:value-of select=&quot;normalize-space()&quot; /&gt;&lt;/span&gt;
      &lt;!-- точка - аргумент normalize-space(.) - означает текущий --&gt;
      &lt;!-- контент, поэтому можно без неё - по умолчанию будет он же --&gt;
      &lt;span class=&quot;st&quot;&gt;”&lt;/span&gt;
    &lt;/li&gt;
    &lt;!-- выводим [Текст] значение --&gt;
  &lt;/xsl:template&gt;

  &lt;!-- в общем, больше ничего не делаем (пока) --&gt;

&lt;/xsl:stylesheet&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Tue, 16 Jul 2013 21:47:42 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73825#p73825</guid>
		</item>
		<item>
			<title><![CDATA[Re: XML/XSL: Обработка всех текстовых узлов всех тегов]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=73816#p73816</link>
			<description><![CDATA[<p>Не надо в стойку <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />. Было время я вообще ничего не понимал в словоохотливости xslt. Сейчас тоже есть темные для меня моменты. А что знаю - тем делюсь.</p><p>Начну, пожалуй, с того, что xsl описывает каким должен получится результирующий документ. В нашем случае (второй запрос) надо показать имя тега и все текстовые элементы тега. </p><p>Основа преобразований - шаблон, набор правил, которые применяются к подходящему элементу. <br />1. <br /></p><div class="codebox"><pre><code>
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;!-- Чтобы преобразовать входной файл, надо связать xml-элементы и шаблоны --&gt;
&lt;xsl:template match=&quot;*&quot;&gt;&lt;!-- * - все теги, то есть шаблон будет применен к любым тегам --&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/p&gt;&lt;!-- выбрать имя тега и отобразить --&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></div><p>Это работает, но только для одно, корневого тега. XML-документ состоит из одного корневого тега и правило применеяется только к нему. Чтобы заработало для всех тегов, надо применить аналогичное правило для всех вложенных тегов:<br />2. <br /></p><div class="codebox"><pre><code>
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;xsl:template match=&quot;*&quot;&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/p&gt;
&lt;xsl:apply-templates select=&quot;*&quot; /&gt;&lt;!-- применить ко всем вложенным тегам --&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></div><p>Теперь все теги видны. Но надо еще получить все текстовые ноды. Аналогично, опишем шаблон и привяжем его к текстовым узлам:<br />3. <br /></p><div class="codebox"><pre><code>
&lt;xsl:template match=&quot;text()&quot;&gt;&lt;!-- только для текстовых узлов --&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;normalize-space()&quot; /&gt;&lt;/p&gt;&lt;!-- удалить пробелы вокруг текста --&gt;
&lt;/xsl:template&gt;
</code></pre></div><p>Простое решение не будет работать, потому что шаблон выбирает только первый текстовый узел из тега - оставляя другие узлы за бортом<br />4. <br /></p><div class="codebox"><pre><code>
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;xsl:template match=&quot;*&quot;&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;text()&quot; /&gt;&lt;/p&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></div><p>Поэтому объединим шаблоны из примеров 2 и 3 и добавим форматирование:<br />5. <br /></p><div class="codebox"><pre><code>
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;

&lt;!-- формат выходных данных - html-документ, начиная каждый тег с новой строки --&gt;
&lt;xsl:output method=&quot;html&quot; version=&quot;1.0&quot; indent=&quot;yes&quot; /&gt;

&lt;xsl:template match=&quot;*&quot;&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/p&gt;
&lt;xsl:apply-templates select=&quot;text()&quot; /&gt;
&lt;xsl:apply-templates select=&quot;*&quot; /&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;text()&quot;&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;normalize-space()&quot; /&gt;&lt;/p&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></div><p>Почти работает. Почти - потому что показаны пустые теги, не содержащие теста. Подредактируем правило и рассмотрим окончательный вариант: <br />6. <br /></p><div class="codebox"><pre><code>
&lt;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&gt;
&lt;xsl:output method=&quot;html&quot; version=&quot;1.0&quot; indent=&quot;yes&quot; /&gt;

&lt;xsl:template match=&quot;*[text()]&quot;&gt;&lt;!-- соответствует любому тегу с непустым текстовым узлом --&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/p&gt;
&lt;xsl:apply-templates select=&quot;text()&quot; /&gt;
&lt;xsl:apply-templates select=&quot;*&quot; /&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;text()&quot;&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;normalize-space()&quot; /&gt;&lt;/p&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 16 Jul 2013 08:43:18 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=73816#p73816</guid>
		</item>
	</channel>
</rss>
