<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; HTA: XML Viewer]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6672</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6672&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «HTA: XML Viewer».]]></description>
		<lastBuildDate>Mon, 15 Jul 2013 11:18:55 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73791#p73791</link>
			<description><![CDATA[<p><strong>Serge Yolkin</strong><br /><a href="http://forum.script-coding.com/viewtopic.php?id=8477">XML/XSL: Обработка всех текстовых узлов всех тегов</a></p><p>Эту задачу тоже можно решить. Сейчас я занят. В будущем отвечу в той теме. Дам разъяснения того кода. Если смогу (время и мое понимание) - помогу решить и эту задачу.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 15 Jul 2013 11:18:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73791#p73791</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73755#p73755</link>
			<description><![CDATA[<p>Спасибо, <strong>Rumata</strong>, затык пройден, буду мудрить дальше.</p><p>[Off]<br />Вообще-то, жаль, что тема XSL на форуме не раскрыта. И в интернете материалов немного. Если не считать перепечатки одних и тех же статей. Собственно, все примеры сводятся к преобразованию заранее известного и хорошо структурированного XML, а более универсальные решения - на вес золота.</p><p>Если кому интересно, случайно обнаружил забавный <a href="http://codingcraft.ru/courseware.php">утиль</a> по данной теме (искал, как раз, примеры)</p><p>[/Off]</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 13 Jul 2013 21:46:48 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73755#p73755</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73754#p73754</link>
			<description><![CDATA[<p><strong>Serge Yolkin</strong></p><p>Быстренько, на коленке написал. Подходит? Если требуются более сложные преобразования, то надо углубляться в тему. <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;//*/text()&quot;&gt;
&lt;xsl:if test=&quot;normalize-space() != &#039;&#039;&quot;&gt;
&lt;p&gt;&lt;xsl:value-of select=&quot;normalize-space()&quot; /&gt;&lt;/p&gt;
&lt;/xsl:if&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;

</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Sat, 13 Jul 2013 20:34:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73754#p73754</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73704#p73704</link>
			<description><![CDATA[<p>А не подскажете ли, как с помощью xslt преобразования можно обрабатывать текстовые ноды по отдельности? Ну, для примера: из xml</p><div class="codebox"><pre><code>&lt;root&gt;
  &lt;tag1&gt;
    текст1
    &lt;tag2&gt;
      текст2
      &lt;tag3/&gt;
      текст3
    &lt;/tag2&gt;
  &lt;/tag1&gt;
  текст4
&lt;/root&gt;</code></pre></div><p>получить html</p><div class="codebox"><pre><code>&lt;p&gt;текст1&lt;/p&gt;
&lt;p&gt;текст2&lt;/p&gt;
&lt;p&gt;текст3&lt;/p&gt;
&lt;p&gt;текст4&lt;/p&gt;</code></pre></div><p>причём, в общем случае (без привязки к именам тэгов и структуре дерева).</p>]]></description>
			<author><![CDATA[null@example.com (Serge Yolkin)]]></author>
			<pubDate>Sat, 13 Jul 2013 00:55:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73704#p73704</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69686#p69686</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>К XPath я пришел через несколько собственных попыток понимания XSLT. По сравнению со вторым - первый прост.</p></blockquote></div><p>А… Ну, так — да, согласен.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 21 Feb 2013 11:54:22 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69686#p69686</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69685#p69685</link>
			<description><![CDATA[<p><strong>alexii</strong><br />К XPath я пришел через несколько собственных попыток понимания XSLT. По сравнению со вторым - первый прост. Вот другой вопрос - как полно он поддерживается в JScript/VBS. У меня не получилось поиграться с осями, а кроме функции text() других просто не признает.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 21 Feb 2013 11:16:54 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69685#p69685</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69684#p69684</link>
			<description><![CDATA[<p>OFF: Насчёт — «прост», я бы поспорил <img src="//forum.script-coding.com/img/smilies/wink.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Thu, 21 Feb 2013 08:12:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69684#p69684</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=69680#p69680</link>
			<description><![CDATA[<p>Прошел год с небольшим и я снова вернулся к теме обработки XML. Интерес возник по причине моего увлечения электронной читалкой и, своего рода, каталогизации коллекции электронных книг. В первую очередь было интересно как автоматизировать процесс переименования и сортировки книг. </p><p>В связи с этим узнал ближе XPath. Это язык запросов к элементам XML в XSL-преобразованиях. Достаточно прост и элегантен. Было бы интересно попробовать реализовать отображение XPath-запросов к заданным элементам XML-документа. Список запросов можно генерировать однократно для всех объектов (элементов или их атрибутов) в процессе загрузки файла в XML Viewer либо отображать отдельный XPath-запрос по наведению указателя мыши на объект.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 21 Feb 2013 02:14:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=69680#p69680</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56536#p56536</link>
			<description><![CDATA[<p>Огромная работа проделана. Поздравляю )))</p><p>Кроссбраузерность явно представлена только в строках <br /></p><div class="codebox"><pre><code>e = e || event;
var target = e.target || e.srcElement;</code></pre></div><p>Остальные проверки - чистые алгоритмические проверки, не связанные с кроссбраузерностью. Вычурная срока <strong>&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--</strong>... Видимо она как-то связана поддержкой старых браузеров -- я не вдавался в ее магию, а использовал чтобы парсер МСИЕ нормально работал и XML Viewer воспринял код приложения как валидный XML.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Tue, 07 Feb 2012 13:32:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56536#p56536</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56530#p56530</link>
			<description><![CDATA[<p>Черт меня дернул в посте #68 пожаловаться на то, что &quot;подчиненные ветки &lt;LI&gt; оказываются внутри &lt;SPAN&gt;&quot;.<br />Виноват, дурак, подумать надо было сначала!<br />На поверку оказалось, что это - не беда, а - великая радость!<br />Т.е. если отказаться от прежнего алгоритма с последовательным перебором всех подчиненных веток, а скрывать все их целиком (как в варианте Rumata), то можно осуществить свертку одной строкой: <strong>objSPAN.style.display = (hide) ? &#039;none&#039; : &#039;&#039;;</strong> без всяких ф-ций и прочих заморочек!<br />Так, же,одной строкой <strong>oLI.className = (hide) ? &#039;hidden&#039; : &#039;&#039;;</strong> осуществляется подсветка свернутого узла.<br />В общем код получился очень простой и понятный.<br />Что же касается скорости, то, по моим измерениям, использование XSL обработки увеличивает ее в 1,5-2 раза.<br />В, общем все последние изменения зафиксированы <a href="http://code.google.com/p/htapp/source/detail?r=db533fa416f351ac7b977d43d50b3e6f505035a1&amp;repo=xml-viewer">тут</a>.<br />Последний <a href="http://code.google.com/p/htapp/downloads/detail?name=xml-viewer-3.0.0.zip">zip</a>.</p><p>2<strong>Rumata</strong><br />1. Ваше авторство зафиксировал. Если что не так - только скажите - поправлю.<br />2. Как видите, прекрасно обошелся без всяких &quot;классовых&quot; ф-ций и других &quot;наворотов&quot;.<br />3. Простите, я неверно выразился, обобщив одним словом &quot;кроссбраузерность&quot; все конструкции, нужные только там где неизвестна версия браузера. Всякие там<br />&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--<br />&lt;!--<br />&lt;?xml version=&quot;1.0&quot;?&gt;<br />--&gt;<br />e = e || event;<br />var target = e.target || e.srcElement;<br />и т.п.</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Tue, 07 Feb 2012 11:42:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56530#p56530</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56512#p56512</link>
			<description><![CDATA[<div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>У меня свое видение результата и способов его достижения. У Вас - свое</p></blockquote></div><p>И это естественно. )))</p><div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>зачем нужны ф-ции подмены классов когда можно запросто присвоить любому элементу нужный класс obj.className=&#039;myclass&#039;?</p></blockquote></div><p>Подмена класса, или точнее добавление/удаление определенного класса. Каждый класс содержит определенный набор правил. Соответственно, управляя классами над заданным элементом легко манипулировать внешним видом элемента. А функции необходимы для унификации обращения с произвольными классами произвольных элементов. </p><div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>постоянные document.getElementById() когда можно просто обратиться к элементу, указав его id?</p></blockquote></div><p>Если обращение к элементу одноразовое, например <strong>Element.removeClass(document.getElementById(&#039;error-container&#039;), &#039;hidden&#039;);</strong> и далее по тексту, то и создание переменной избыточно. А использование функции вместо прямого обращения по id - это старые привычки, унаследованные от веб-программирования. Кстати, неплохие привычки. И еще. Я уже не помню, но кажется в одном из браузеров не рекомендуется создавать переменные, одноименные существующим тегам. </p><div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>Зачем понатыкана куча ненужных кросс-браузерных проверок</p></blockquote></div><p>А вот здесь я требую конкретных примеров кучи.</p><div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>вырву из Вашего кода то, что мне ОЧЕНЬ понравилось и продолжу свой путь</p></blockquote></div><p>Дерзайте )))</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 06 Feb 2012 19:45:24 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56512#p56512</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56505#p56505</link>
			<description><![CDATA[<p>2<strong>Rumata</strong><br />Я просил помощи только с XSL. Вы же по сути выложили совершенно иную программу.<br />Мне очень нравятся использованные в ней решения, и я обязательно буду их использовать в XMLViewer (конечно, не забыв упомянуть их автора). Но использовать код целиком (пусть даже модифицированный) я не буду.<br />У меня свое видение результата и способов его достижения. У Вас - свое.<br />В Вашем коде мне многое непонятно. Например, зачем нужны ф-ции подмены классов когда можно запросто присвоить любому элементу нужный класс <strong>obj.className=&#039;myclass&#039;</strong>? Зачем нужны постоянные document.getElementById() когда можно просто обратиться к элементу, указав его id? Зачем понатыкана куча ненужных кросс-браузерных проверок, ведь HTA работает только на движке IE? Продолжать задавать вопросы можно долго...<br />Нет уж, лучше я вырву из Вашего кода то, что мне ОЧЕНЬ понравилось и продолжу свой путь <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Mon, 06 Feb 2012 16:11:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56505#p56505</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56503#p56503</link>
			<description><![CDATA[<div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>как бы сделать так, чтобы содержимое узла отображалось в одной строке с именем и атрибутами</p></blockquote></div><p>Я тоже думал над этим (когда хотел представить свое видение задачи). Надо отказаться от списков UL/LI и полностью перейти на SPAN - строковым элементам. Либбо изменить отображение элементов с помощью CSS. Это решаемо - ведь МСИЕ показывает текстовое содержимое тега в той же строке что и имя тега. Мозилла в отличие от МСИЕ отображает текст в отдельной строке. </p><div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>Мне очень нравится</p></blockquote></div><p>Спасибо. </p><div class="quotebox"><cite>mozers пишет:</cite><blockquote><p>вопросы</p></blockquote></div><p>К сожалению я мало документировал код, поэтому многое со временем забудется. Так задавайте свои вопросы сразу. Возможно они кое-что мне помогут прояснить. Я заложил некоторые основы для расширяемости, но пока я не знаю в каком направлении двигаться дальше - то ли расширять существующий код, то ли полностью переписать его.</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 06 Feb 2012 13:59:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56503#p56503</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56502#p56502</link>
			<description><![CDATA[<p>По сути переделано ВСЕ.<br />А вообще - КЛАСС! Мне очень нравится <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Есть, конечно, мелкие вопросы... Но лучше я их оставлю &quot;на потом&quot;.<br />Меня больше интересует как бы сделать так, чтобы содержимое узла отображалось в одной строке с именем и атрибутами (как было раньше), а не занимало отдельную под-строку. И раньше эта проблема решалась непросто и сейчас, видимо, придется покумекать...</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Mon, 06 Feb 2012 13:13:05 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56502#p56502</guid>
		</item>
		<item>
			<title><![CDATA[Re: HTA: XML Viewer]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=56501#p56501</link>
			<description><![CDATA[<p>Вот пример. Это черновик, который изначально состоит из отдельных файлов, которые я объединил в один для простоты тестирования. В конечном результате этот пример должен быть существенно переработан для публикации. </p><p>Я счел нужным дать некоторое пространное описание этого черновика. Если эти объяснения скучны и неинтересны, то сразу переходите к самому главному в конце. </p><p>Для отображения имени xml-тега выбран H3 из соображений, что он лучше подходит для отображения структуры (так же как Вы выбрали списки). Дизайнер из меня не очень хороший, но я предпочитаю большие буквы и много пустого пространства на странице. Поэтому не пугайтесь. <br />-- В CSS предусмотрены практически все необходимые правила (некоторые вставлены как пустышки). Кроме того добавлено немного рюшечек, имитирующих раскрывающиеся/схлопывающиеся подуровни в виде символов плюс/минус. <br />-- XSL &quot;знает&quot; как преобразовать текст, комментарии, xslt-инструкции, вложенные и одиночные теги и атрибуты тегов. Также &quot;различает&quot; теги с установленным атрибутом <strong>type=&quot;text/*&quot;</strong>. <br />-- JavaScript добавляет необходимую динамику - свернуть/развернуть теги. <br />-- HTA контейнер всего этого хозяйства.</p><p>Еще немного слов по поводу динамики. Она достигалась добавлением класса к внешнему тегу. Сокращенный пример, объясняющий действо. </p><p>Обычный вид - тег развернут<br /></p><div class="codebox"><pre><code>
&lt;div class=&quot;node-container&quot;&gt;
&lt;h3 class=&quot;node-tag&quot;&gt;...&lt;/h3&gt;
&lt;div class=&quot;node-content&quot;&gt;
...
&lt;/div&gt;
&lt;/div&gt;</code></pre></div><p>.<br />Тег свернут<br /></p><div class="codebox"><pre><code>
&lt;div class=&quot;node-container collapsed&quot;&gt;
&lt;h3 class=&quot;node-tag&quot;&gt;...&lt;/h3&gt;
&lt;div class=&quot;node-content&quot;&gt;
...
&lt;/div&gt;
&lt;/div&gt;</code></pre></div><p>.<br />Желаемый результат достигается за счет того, что заданы CSS-правила:<br /></p><div class="codebox"><pre><code>.collapsed .node-tag	{
	background-color: #ffc;
}
.collapsed .node-content	{
	display: none;
}</code></pre></div><p>Первое правило меняет фоновый цвет тега, второе правило скрывает содержимое. Код управляет добавлением/удалением класса <strong>.collapsed</strong> элементу <strong>.node-container</strong> при клике внутри элемента <strong>.node-tag</strong>. </p><div class="codebox"><pre><code>
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;XML Viewer&lt;/title&gt;
&lt;!--
&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;xmlview.css&quot; /&gt;
--&gt;
&lt;style type=&quot;text/css&quot;&gt;

.instruction	{
	border: 1px solid #00f;
	color: #00c;
	font-style: italic;
	font-size: 11pt;
}

.comment	{
	border: 1px solid #ccc;
	color: #999;
	font-style: italic;
	font-size: 11pt;
}

.node-container	{
	border-left: 1px solid #eee;
	font-family: Verdana, Tahoma, sans-serif;
	font-size: 11pt;
}
.node-single-tag	{
	margin: 0;
}
.node-tag	{
	border-bottom: 1px solid #eee;
	cursor: pointer;
	margin: 0;
}
.node-name	{
}
.node-text	{
}
.node-content	{
	margin: 0 0 0 20px;
}
.node-code	{
	border: 1px solid #ccc;
	background-color: #eee;
	font-size: 0.8em;
	margin: 0;
}

.attr	{
	font-size: 0.9em;
}
.attr-name	{
	color: #c00;
	font-weight: bold;
}
.attr-value	{
	color: #00c;
	font-style: italic;
}

.collapsed .node-tag	{
	background-color: #ffc;
}
.collapsed .node-content	{
	display: none;
}

.sign-closed, 
.sign-opened	{
	font-size: 12pt;
	margin-left: -15px;
	text-align: center;
	width: 15px;
}
.sign-closed	{
	display: none;
}
.collapsed .sign-closed	{
	display: inline-block;
}
.sign-opened	{
	display: inline-block;
}
.collapsed .sign-opened	{
	display: none;
}

.hidden	{
	display: none;
}

.error	{
	background-color: #ffc;
	border: 1px solid #f00;
	font-family: Verdana, Tahoma, sans-serif;
	padding: 10px;
}
.error-line	{
	color: #f00;
}

&lt;/style&gt;
&lt;!--
&lt;script type=&quot;text/javascript&quot; src=&quot;xmlview.js&quot;&gt;&lt;/script&gt;
--&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

var Element = {
	/**
	 * Checks that an element has a provided className
	 */
	classExists: function(element, className)
	{
		return this.RE(className).test(element.className);
	}, 
	/**
	 * Creates the regular expression to check that 
	 * a className is defined for an element and 
	 * remove an existing one from an element
	 */
	RE: function(className)
	{
		return new RegExp(&#039;(?:^|\\s+)&#039; + className + &#039;(?:\\s+|$)&#039;, &#039;g&#039;);
	}, 
	/**
	 * Adds a className to an element
	 */
	addClass: function(element, className)
	{
		if ( ! this.classExists(element, className) ) {
			element.className += &#039; &#039; + className;
		}
		return element;
	}, 
	/**
	 * Removes a classname
	 */
	removeClass: function(element, className)
	{
		className = element.className.replace(this.RE(className), &#039; &#039;);
		if ( className != element.className ) {
			element.className = className;
		}
		return element;
	}, 
	/**
	 * Toggles (turn on/turn off) a className
	 */
	toggleClass: function(element, className)
	{
		if ( this.classExists(element, className) ) {
			this.removeClass(element, className);
		} else {
			this.addClass(element, className);
		}
		return element;
	}
};

var XMLView = {
	/**
	 * Loads and validate a xml-file
	 */
	loadXml: function(filename, async, onreadystatechange)
	{
		var doc = new ActiveXObject(&quot;Msxml2.DOMDocument&quot;);
		doc.async = async;
		if ( typeof onreadystatechange == &#039;function&#039; ) {
			doc.onreadystatechange = onreadystatechange;
		}
		doc.load(filename);
		return doc;
	}, 
	/**
	 * Loads an input xml-file, shows errors if they occur
	 *
	 * loader is callback-function that should return an xml-document
	 *
	 * onerror is callback function, handler of parsing errors
	 */
	loadSafely: function(loader, onerror)
	{
		if ( typeof loader != &#039;function&#039; ) {
			throw new TypeError();
		}

		var doc = loader(this);
		if ( ! doc ) {
			return;
		}

		var err = doc.parseError;

		if ( err.errorCode == 0 ) {
			return doc;
		}

		if ( typeof onerror == &#039;function&#039; ) {
			onerror(err);
		}
	}, 
	/**
	 * Loads an input xml-file and the predefined xsl-file
	 * and transforms a xml-file accordingly xsl
	 *
	 * xmlLoader and xslLoader are callback-functions that 
	 * should return xml-documents
	 *
	 * onerror is callback function, handler of parsing errors
	 */
	transform: function(xmlLoader, xslLoader, onerror)
	{
		var xml = this.loadSafely(xmlLoader, onerror);
		if ( ! xml ) {
			return;
		}

		var xsl = this.loadSafely(xslLoader, onerror);
		if ( ! xsl ) {
			return;
		}

		return xml.transformNode(xsl);
	}, 

	/**
	 * The main routine
	 *
	 * Loads the predefined xsl-file
	 * Loads an input xml-file
	 * Transform an input file
	 * Outputs the result or details on error to a html page
	 *
	 * element is a reference to a html-element that is provided
	 * when the method is called
	 *
	 * xmlLoader and xslLoader are callback-functions that 
	 * should return well-fromed xml-files
	 *
	 * onerror is callback function, handler of parsing errors
	 */
	init: function(element, xmlLoader, xslLoader, onerror)
	{
		var html;

		if ( element ) {
			html = this.transform(xmlLoader, xslLoader, onerror);
		}

		if ( html ) {
			element.innerHTML = html;
		}

		document.onmousedown = function(e)
		{
			e = e || event;
			var target = e.target || e.srcElement;

			// Looking for the nearest node-tag
			while ( target &amp;&amp; (target.className || &#039;&#039;).indexOf(&#039;node-tag&#039;) == -1 ) {
				target = target.parentNode;
			}

			if ( ! target ) {
				return;
			}

			// Perform toggle (turn on/turn off)
			Element.toggleClass(target.parentNode, &#039;collapsed&#039;);
		};
	}
};

//--&gt;&lt;!]]&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

window.onload = function()
{
	var html_entity_encode = function(value)
	{
		var div = document.createElement(&#039;div&#039;);
		var text = document.createTextNode(value);
		div.appendChild(text);
		return div.innerHTML.replace(/&quot;/g, &#039;&amp;quot;&#039;).replace(/&#039;/g, &#039;&#039;&#039;);
	};

	var xmlfile;
//	var xslfile = &#039;xmlview.xsl&#039;;

	XMLView.init(
		// the reference to the xml-container
		document.getElementById(&#039;xml-container&#039;), 

		// xml-file loader
		function(XMLView)
		{
			// Load a file using type=file input
			var f = document.getElementById(&#039;openFile&#039;);
			f.click();

			xmlfile = f.value;
			if ( ! xmlfile ) {
				return;
			}

			document.title += &#039; :: &#039; + xmlfile;

			return XMLView.loadXml(xmlfile);
		}, 

		// xsl-file loader
		function(XMLView)
		{
			return document.getElementById(&#039;xslDocument&#039;);
//			return XMLView.loadXml(xslfile);
		}, 

		// parsing error handler
		function(err)
		{
			Element.removeClass(document.getElementById(&#039;error-container&#039;), &#039;hidden&#039;);

			document.getElementById(&#039;error-url&#039;).innerHTML = err.url;
			document.getElementById(&#039;error-reason&#039;).innerHTML = err.reason;
			document.getElementById(&#039;error-line&#039;).innerHTML = err.line;
			document.getElementById(&#039;error-linepos&#039;).innerHTML = err.linepos;

			document.getElementById(&#039;error-srcText&#039;).innerHTML = html_entity_encode(err.srcText);
			document.getElementById(&#039;error-pointer&#039;).innerHTML = new Array(err.linepos).join(&#039;-&#039;) + &#039;^&#039;;
		}
	);
};

//--&gt;&lt;!]]&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id=&quot;xml-container&quot;&gt;&lt;/div&gt;

&lt;div class=&quot;error hidden&quot; id=&quot;error-container&quot;&gt;
&lt;b&gt;URL: &lt;/b&gt;&lt;span id=&quot;error-url&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;Error: &lt;/b&gt;&lt;span id=&quot;error-reason&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;Line: &lt;/b&gt;&lt;span id=&quot;error-line&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;Position: &lt;/b&gt;&lt;span id=&quot;error-linepos&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;code class=&quot;error-line&quot; id=&quot;error-srcText&quot;&gt;&lt;/code&gt;&lt;br /&gt;
&lt;code class=&quot;error-line&quot; id=&quot;error-pointer&quot;&gt;&lt;/code&gt;
&lt;/div&gt;

&lt;div class=&quot;hidden&quot;&gt;
&lt;input type=&quot;file&quot; id=&quot;openFile&quot; /&gt;
&lt;/div&gt;

&lt;/body&gt;
&lt;xml id=&quot;xslDocument&quot;&gt;
&lt;!--
&lt;?xml version=&quot;1.0&quot;?&gt;
--&gt;
&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;no&quot; /&gt;

&lt;xsl:template match=&quot;/&quot;&gt;
&lt;xsl:apply-templates /&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;processing-instruction()&quot;&gt;
&lt;div class=&quot;instruction&quot;&gt;&lt;xsl:value-of select=&quot;name()&quot;/&gt;&lt;xsl:text&gt; &lt;/xsl:text&gt;&lt;xsl:value-of select=&quot;.&quot;/&gt;&lt;/div&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;comment()&quot;&gt;
&lt;div class=&quot;comment&quot;&gt;&lt;xsl:value-of select=&quot;.&quot; /&gt;&lt;/div&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;text()&quot;&gt;
&lt;span class=&quot;node-text&quot;&gt;&lt;xsl:value-of select=&quot;.&quot; /&gt;&lt;/span&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;*&quot;&gt;
&lt;div class=&quot;node-container&quot;&gt;
&lt;h3 class=&quot;node-single-tag&quot;&gt;&lt;span class=&quot;node-name&quot;&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/span&gt;&lt;xsl:apply-templates select=&quot;@*&quot; /&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;*[node()]&quot;&gt;
&lt;div class=&quot;node-container&quot;&gt;
&lt;h3 class=&quot;node-tag&quot;&gt;
&lt;span class=&quot;sign-opened&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;sign-closed&quot;&gt;+&lt;/span&gt;
&lt;span class=&quot;node-name&quot;&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/span&gt;&lt;xsl:apply-templates select=&quot;@*&quot; /&gt;&lt;/h3&gt;
&lt;div class=&quot;node-content&quot;&gt;
&lt;xsl:choose&gt;
&lt;xsl:when test=&quot;starts-with(@type,&#039;text/&#039;)&quot;&gt;
&lt;pre class=&quot;node-code&quot;&gt;&lt;xsl:value-of select=&quot;.&quot; /&gt;&lt;/pre&gt;
&lt;/xsl:when&gt;
&lt;xsl:otherwise&gt;
&lt;xsl:apply-templates /&gt;
&lt;/xsl:otherwise&gt;
&lt;/xsl:choose&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/xsl:template&gt;

&lt;xsl:template match=&quot;@*&quot;&gt;
&lt;xsl:text&gt; &lt;/xsl:text&gt;&lt;span class=&quot;attr&quot;&gt;&lt;code class=&quot;attr-name&quot;&gt;&lt;xsl:value-of select=&quot;name()&quot; /&gt;&lt;/code&gt;&lt;xsl:text&gt;=&lt;/xsl:text&gt;&lt;code class=&quot;attr-value&quot;&gt;&lt;xsl:value-of select=&quot;.&quot; /&gt;&lt;/code&gt;&lt;/span&gt;
&lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;
&lt;/xml&gt;
&lt;/html&gt;</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Mon, 06 Feb 2012 11:56:47 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=56501#p56501</guid>
		</item>
	</channel>
</rss>
