<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=343946&amp;view=findpost&amp;p=3017407</guid>
        <pubDate>Tue, 01 Nov 2011 07:54:31 +0000</pubDate>
        <title>Вывод элементов документа вместе с атрибутами.ХSLT</title>
        <link>https://forum.sources.ru/index.php?showtopic=343946&amp;view=findpost&amp;p=3017407</link>
        <description><![CDATA[ferbolg: Спасибо  :)]]></description>
        <author>ferbolg</author>
        <category>XML, XSL, XSLT</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=343946&amp;view=findpost&amp;p=3017299</guid>
        <pubDate>Tue, 01 Nov 2011 05:58:11 +0000</pubDate>
        <title>Вывод элементов документа вместе с атрибутами.ХSLT</title>
        <link>https://forum.sources.ru/index.php?showtopic=343946&amp;view=findpost&amp;p=3017299</link>
        <description><![CDATA[ss: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&#62;</div><div class="code_line">&#60;xsl:stylesheet version=&quot;1.0&quot; xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:template match=&quot;/&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;HTML&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;title/&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;body&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:apply-templates select=&quot;.//*&quot; mode=&quot;test-all-nodes&quot;/&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;/body&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/HTML&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:template match=&quot;*&quot; mode=&quot;test-all-nodes&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:if test=&quot;not(preceding::*[name(.)=name(current())])&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Element &#60;b&#62;&#60;xsl:value-of select=&quot;name(current())&quot; /&#62;&#60;/b&#62; has attributes: &#60;xsl:apply-templates select=&quot;@*&quot; mode=&quot;print-attributes&quot;/&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/xsl:if&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:if test=&quot;preceding::*[name(.)=name(current())]&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:apply-templates select=&quot;.&quot; mode=&quot;test-attributes&quot;/&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/xsl:if&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:template match=&quot;*&quot; mode=&quot;test-attributes&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:for-each select=&quot;preceding::*[name(.)=name(current())]&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;!-- влом --&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/xsl:for-each&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:template match=&quot;@*[position()=last()]&quot; mode=&quot;print-attributes&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;b&#62;&#60;xsl:value-of select=&quot;name(current())&quot; /&#62;.&#60;/b&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:template match=&quot;@*&quot; mode=&quot;print-attributes&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;b&#62;&#60;xsl:value-of select=&quot;name(current())&quot; /&#62;, &#60;/b&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/xsl:stylesheet&#62;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>ss</author>
        <category>XML, XSL, XSLT</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=343946&amp;view=findpost&amp;p=3017195</guid>
        <pubDate>Mon, 31 Oct 2011 19:00:54 +0000</pubDate>
        <title>Вывод элементов документа вместе с атрибутами.ХSLT</title>
        <link>https://forum.sources.ru/index.php?showtopic=343946&amp;view=findpost&amp;p=3017195</link>
        <description><![CDATA[ferbolg: Доброго времени суток&#33; <br>
Нужно составить &quot;универсальную&quot; таблицу стилей ХSLT, которая для xml-документа произвольной структуры выведет список элементов вместе с атрибутами так, чтобы елементы одинаковой структуры( с одинаковым именем и набором атрибутов) встречались в списке только один раз. Изгалялся и так, и сяк, пока родил следующее:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&#62;</div><div class="code_line">&#60;xsl:stylesheet version=&quot;1.0&quot; </div><div class="code_line">xmlns:xsl=&quot;http://www.w3.org/1999/XSL/Transform&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;xsl:template match=&quot;/&quot;&#62;</div><div class="code_line">&#60;HTML&#62;</div><div class="code_line">&#60;title&#62;&#60;/title&#62;</div><div class="code_line">&#60;body&#62; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;xsl:call-template name=&quot;recurs&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:with-param name=&quot;nextnodes&quot; select=&quot;child::*&quot; /&#62;</div><div class="code_line">&#60;/xsl:call-template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/body&#62;</div><div class="code_line">&#60;/HTML&#62;</div><div class="code_line">&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;xsl:template name=&quot;recurs&quot;&#62;</div><div class="code_line">&#60;xsl:param name=&quot;nextnodes&quot; /&#62;</div><div class="code_line">&#60;xsl:for-each select=&quot;$nextnodes&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:if test=&quot;not(name(current())=name(following::*)) and not(name(current())=name(following::*/descendant::*)) and not(name(current())=name(following-sibling::*))&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Element &#60;b&#62;&#60;xsl:value-of select=&quot;name(current())&quot; /&#62;&#60;/b&#62; has attributes &#60;text&#62; &#60;/text&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:for-each select=&quot;@*&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:if test=&quot;position()=last()&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;b&#62;&#60;xsl:value-of select=&quot;name(current())&quot; /&#62;&#60;text&#62;.&#60;/text&#62;&#60;/b&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/xsl:if&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:if test=&quot;position()!=last()&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;b&#62;&#60;xsl:value-of select=&quot;name(current())&quot; /&#62;&#60;text&#62;, &nbsp;&#60;/text&#62;&#60;/b&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/xsl:if&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;/xsl:for-each&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;br /&#62;&#60;br /&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:if&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;xsl:call-template name=&quot;recurs&quot;&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#60;xsl:with-param name=&quot;nextnodes&quot; select=&quot;child::*&quot; /&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;&#60;/xsl:call-template&#62;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&#60;/xsl:for-each&#62; </div><div class="code_line">&#60;/xsl:template&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/xsl:stylesheet&#62;</div></ol></div></div></div></div><br>
<br>
Вот такой тест-кейз обрабатывает как надо:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&#62;</div><div class="code_line">&#60;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;task3_4a.xsl&quot;?&#62;</div><div class="code_line">&#60;catalog subnodes=&quot;2&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;cities country=&quot;England&quot;&#62;</div><div class="code_line">&#60;city name=&quot;London&quot; region=&quot;London&quot; population=&quot;10000&quot; /&#62;</div><div class="code_line">&#60;city name=&quot;New South Wales&quot; region=&quot;Wales&quot; population=&quot;800000&quot; /&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/cities&#62; </div><div class="code_line">&nbsp;</div><div class="code_line">&#60;articles country=&quot;USA&quot;&#62;</div><div class="code_line">&#60;article name=&quot;My lovely country&quot; src=&quot;art1.txt&quot; /&#62;</div><div class="code_line">&#60;article name=&quot;Places to visit&quot; src=&quot;art2.txt&quot; /&#62;</div><div class="code_line">&#60;article name=&quot;Article 3&quot; src=&quot;art3.txt&quot; /&#62;</div><div class="code_line">&#60;/articles&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;books&#62;</div><div class="code_line">&#60;book title=&quot;Warhammer&quot;&#62;</div><div class="code_line">&nbsp;&#60;/book&#62;</div><div class="code_line">&#60;book title=&quot;We fought for truth&quot;&#62; </div><div class="code_line">&#60;/book&#62;</div><div class="code_line">&#60;/books&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;scientifics &nbsp;atr = &quot; &quot;&#62;</div><div class="code_line">&nbsp;&#60;book title=&quot;Warhammer&quot;&#62;</div><div class="code_line">&#60;/book&#62; </div><div class="code_line">&#60;/scientifics&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/catalog&#62;</div></ol></div></div></div></div><br>
Вывод собственно такой:<br>
Element catalog has attributes subnodes.<br>
<br>
Element cities has attributes country.<br>
<br>
Element city has attributes name, region, population.<br>
<br>
Element articles has attributes country.<br>
<br>
Element article has attributes name, src.<br>
<br>
Element books has attributes<br>
<br>
Element scientifics has attributes atr.<br>
<br>
Element book has attributes title.<br>
<br>
А на таком тесте происходит фейл:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&#62;</div><div class="code_line">&#60;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;task3_4a.xsl&quot;?&#62;</div><div class="code_line">&#60;catalog subnodes=&quot;2&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;cities country=&quot;England&quot;&#62;</div><div class="code_line">&#60;city name=&quot;London&quot; region=&quot;London&quot; population=&quot;10000&quot; /&#62;</div><div class="code_line">&#60;city name=&quot;New South Wales&quot; region=&quot;Wales&quot; population=&quot;800000&quot; /&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/cities&#62; </div><div class="code_line">&nbsp;</div><div class="code_line">&#60;articles country=&quot;USA&quot;&#62;</div><div class="code_line">&#60;article name=&quot;My lovely country&quot; src=&quot;art1.txt&quot; /&#62;</div><div class="code_line">&#60;article name=&quot;Places to visit&quot; src=&quot;art2.txt&quot; /&#62;</div><div class="code_line">&#60;article name=&quot;Article 3&quot; src=&quot;art3.txt&quot; /&#62;</div><div class="code_line">&#60;/articles&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;books&#62;</div><div class="code_line">&#60;book title=&quot;Warhammer&quot;&#62;</div><div class="code_line">&#60;article name=&quot;My lovely country&quot; src=&quot;art1.txt&quot; /&#62; </div><div class="code_line">&nbsp;&#60;/book&#62;</div><div class="code_line">&#60;book title=&quot;We fought for truth&quot;&#62; </div><div class="code_line">&#60;article name=&quot;My lovely country&quot; src=&quot;art1.txt&quot; /&#62; </div><div class="code_line">&#60;/book&#62;</div><div class="code_line">&#60;/books&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;scientifics &nbsp;atr = &quot; &quot;&#62;</div><div class="code_line">&nbsp;&#60;book title=&quot;Warhammer&quot;&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&#60;article name=&quot;My lovely country&quot; src=&quot;art1.txt&quot; /&#62; </div><div class="code_line">&nbsp;&#60;/book&#62; </div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/scientifics&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">&#60;/catalog&#62;</div></ol></div></div></div></div><br>
<br>
В списке дваждый появляется Element article has attributes name, src.  :wacko: <br>
Хотелось бы как-то это победить, но идей пока нет...]]></description>
        <author>ferbolg</author>
        <category>XML, XSL, XSLT</category>
      </item>
	
      </channel>
      </rss>
	