Универсальный просмотр XML в поле HTML-документа

28.09.16

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Произвольный XML-документ отображается в ПолеHTMLДокумента через универсальное XSLT-преобразование с возможностью свертывания уровней, аналогично тому, как делает это по умолчанию интернет-браузер, но без использования файловых операций и вызова внешних объектов

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ОтображениеXML.epf
.epf 16,63Kb
97 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

Для тех, кто имеет дело с обменами данных и взаимодействием с интернет-приложениями, часто возникает необходимость открыть на просмотр в 1С XML с незнакомой структурой. Что делать?

Разнообразные предшественники

пробовали заниматься автоматическим анализом структуры XML, создавали более или менее универсальные утилиты программного разбора, используя при этом разнообразные "нагруженные" объекты 1С типа ТаблицаЗначений, ДеревоЗначений, либо в худшем (для универсальности и переносимости) случае подключали внешние компоненты.

Но неужели нет простых средств, с минимальными затратами и желательно без программирования?

Конечно, можно поместить текст XML в Поле текстового документа. Но если XML получен из источника, который формировал его автоматически, то скорее всего текст будет неотформатирован и плохо читаем, например:

неформат XML

Заметим, что форматирование XML задача несложная. Ее стандартно решает объект ЗаписьXML (свойство Отступ либо объект ПараметрыЗаписиXML), примерно так:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ИсходныйТекстXML);

ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Истина, Истина));//здась как раз и содержится явное указание 1С отформатировать XML при записи

ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ИсходныйТекстXML= ЗаписьXML.Закрыть();

В результате получаем читаемый документ:

формат XML

 Но так отобразить может только в поле текстового документа (причем без подсветки синтаксиса и без свертывания уровней).

Но при работе с интернет задача же часто стоит отображать XML именно в поле HTML-документа. Как?

Если в ПолеHTMLДокумента поместить некий произвольный XML, то 1С ничего не отобразит.

Не поможет и попытка предварительного чтения XML объектами 1С, к примеру:

 ЧтениеXML = Новый ЧтениеXML; 
 ЧтениеXML.УстановитьСтроку(OriginXML);
 ПостроительDOM = Новый ПостроительDOM;
 ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
 ЗаписьHTML = Новый ЗаписьHTML;
 ЗаписьHTML.УстановитьСтроку();
 ЗаписьDOM = Новый ЗаписьDOM;
 ЗаписьDOM.Записать(ДокументDOM, ЗаписьHTML); 
 XML2HTML = ЗаписьHTML.Закрыть();

Однако известно, что в отличие от ПолеHTMLДокумента из 1С, интернет-броузеры умеют отображать текст произвольых XML-документов. Примерно так:

формат как в IE

Оказывается, делают они это с помощью встроенных XSL-таблиц. Для IE в Windows такая таблица расположена на локальном компьютере по адресу: res://msxml3.dll/defaultss.xsl   ( см. например http://www.script-coding.com/XSL.html или http://farinadesign.narod.ru/XMLtech/Lectures/DSO.html )

Поэтому задачу полностью решает использование XSL-преобразования (идея взята из //infostart.ru/public/184288/ ):

	Преобразование = Новый ПреобразованиеXSL;
	Преобразование.ЗагрузитьИзСтроки(ТекстПреобразованияXSL);
	XML2HTML = Преобразование.ПреобразоватьИзСтроки(ИсходныйТекстXML);

Дополнительного программирования в 1С не требуется! Требуется только получитьподходящий default.xsl файл. Причем, естественно, варианты таких файлов могут отличаться. Предлагаю использовать следующий, полученный из предыдущих версий IE, исходник xsl-преобразования:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output indent="no" method="html"/>
 <xsl:template match="/">
  <HTML>
   <HEAD>
    <SCRIPT>
     <xsl:comment><![CDATA[
                  function f(e){
                     if (e.className=="ci") {
                       if (e.children(0).innerText.indexOf("\n")>0) fix(e,"cb");
                     }
                     if (e.className=="di") {
                       if (e.children(0).innerText.indexOf("\n")>0) fix(e,"db");
                     } e.id="";
                  }
                  function fix(e,cl){
                    e.className=cl;
                    e.style.display="block";
                    j=e.parentElement.children(0);
                    j.className="c";
                    k=j.children(0);
                    k.style.visibility="visible";
                    k.href="#";
                  }
                  function ch(e) {
                    mark=e.children(0).children(0);
                    if (mark.innerText=="+") {
                      mark.innerText="-";
                      for (var i=1;i<e.children.length;i++) {
                        e.children(i).style.display="block";
                      }
                    }
                    else if (mark.innerText=="-") {
                      mark.innerText="+";
                      for (var i=1;i<e.children.length;i++) {
                        e.children(i).style.display="none";
                      }
                    }
                  }
                  function ch2(e) {
                    mark=e.children(0).children(0);
                    contents=e.children(1);
                    if (mark.innerText=="+") {
                      mark.innerText="-";
                      if (contents.className=="db"||contents.className=="cb") {
                        contents.style.display="block";
                      }
                      else {
                        contents.style.display="inline";
                      }
                    }
                    else if (mark.innerText=="-") {
                      mark.innerText="+";
                      contents.style.display="none";
                    }
                  }
                  function cl() {
                    e=window.event.srcElement;
                    if (e.className!="c") {
                      e=e.parentElement;
                      if (e.className!="c") {
                        return;
                      }
                    }
                    e=e.parentElement;
                    if (e.className=="e") {
                      ch(e);
                    }
                    if (e.className=="k") {
                      ch2(e);
                    }
                  }
                  function ex(){}
                  function h(){window.status=" ";}
                  document.onclick=cl;
              ]]></xsl:comment>
    </SCRIPT>
    <STYLE>
              BODY {font:x-small 'Verdana'; margin-right:1.5em}
                .c  {cursor:hand}
                .b  {color:red; font-family:'Courier New'; font-weight:bold;
                     text-decoration:none}
                .e  {margin-left:1em; text-indent:-1em; margin-right:1em}
                .k  {margin-left:1em; text-indent:-1em; margin-right:1em}
                .t  {color:#990000}
                .xt {color:#990099}
                .ns {color:red}
                .dt {color:green}
                .m  {color:blue}
                .tx {font-weight:bold}
                .db {text-indent:0px; margin-left:1em; margin-top:0px;
                     margin-bottom:0px;padding-left:.3em;
                     border-left:1px solid #CCCCCC; font:small Courier}
                .di {font:small Courier}
                .d  {color:blue}
                .pi {color:blue}
                .cb {text-indent:0px; margin-left:1em; margin-top:0px;
                     margin-bottom:0px;padding-left:.3em; font:small Courier;
                     color:#888888}
                .ci {font:small Courier; color:#888888}
                PRE {margin:0px; display:inline}
           </STYLE>
   </HEAD>
   <BODY class="st">
    <xsl:apply-templates/>
   </BODY>
  </HTML>
 </xsl:template>
 <xsl:template match="processing-instruction()">
  <DIV class="e">
   <SPAN class="b">
    <xsl:call-template name="entity-ref">
     <xsl:with-param name="name">nbsp</xsl:with-param>
    </xsl:call-template>
   </SPAN>
   <SPAN class="m">
    <xsl:text>&lt;?</xsl:text>
   </SPAN>
   <SPAN class="pi">
    <xsl:value-of select="name(.)"/>
    <xsl:value-of select="."/>
   </SPAN>
   <SPAN class="m">
    <xsl:text>?></xsl:text>
   </SPAN>
  </DIV>
 </xsl:template>
 <xsl:template match="processing-instruction('xml')">
  <DIV class="e">
   <SPAN class="b">
    <xsl:call-template name="entity-ref">
     <xsl:with-param name="name">nbsp</xsl:with-param>
    </xsl:call-template>
   </SPAN>
   <SPAN class="m">
    <xsl:text>&lt;?</xsl:text>
   </SPAN>
   <SPAN class="pi">
    <xsl:text>xml </xsl:text>
    <xsl:for-each select="@*">
     <xsl:value-of select="name(.)"/>
     <xsl:text>="</xsl:text>
     <xsl:value-of select="."/>
     <xsl:text>" </xsl:text>
    </xsl:for-each>
   </SPAN>
   <SPAN class="m">
    <xsl:text>?></xsl:text>
   </SPAN>
  </DIV>
 </xsl:template>
 <xsl:template match="@*">
  <SPAN>
   <xsl:attribute name="class"><xsl:if test="xsl:*/@*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
   <xsl:value-of select="name(.)"/>
  </SPAN>
  <SPAN class="m">="</SPAN>
  <B>
   <xsl:value-of select="."/>
  </B>
  <SPAN class="m">"</SPAN>
 </xsl:template>
 <xsl:template match="text()">
  <DIV class="e">
   <SPAN class="b"> </SPAN>
   <SPAN class="tx">
    <xsl:value-of select="."/>
   </SPAN>
  </DIV>
 </xsl:template>
 <xsl:template match="comment()">
  <DIV class="k">
   <SPAN>
    <A STYLE="visibility:hidden" class="b" false"
    <SPAN class="m">
     <xsl:text>&lt;!--</xsl:text>
    </SPAN>
   </SPAN>
   <SPAN class="ci" id="clean">
    <PRE>
     <xsl:value-of select="."/>
    </PRE>
   </SPAN>
   <SPAN class="b">
    <xsl:call-template name="entity-ref">
     <xsl:with-param name="name">nbsp</xsl:with-param>
    </xsl:call-template>
   </SPAN>
   <SPAN class="m">
    <xsl:text>--></xsl:text>
   </SPAN>
   <SCRIPT>f(clean);</SCRIPT>
  </DIV>
 </xsl:template>
 <xsl:template match="*">
  <DIV class="e">
   <DIV STYLE="margin-left:1em;text-indent:-2em">
    <SPAN class="b">
     <xsl:call-template name="entity-ref">
      <xsl:with-param name="name">nbsp</xsl:with-param>
     </xsl:call-template>
    </SPAN>
    <SPAN class="m">&lt;</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>/></xsl:text>
    </SPAN>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template match="*[node()]">
  <DIV class="e">
   <DIV class="c">
    <A class="b" href="#" false"
    <SPAN class="m">&lt;</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
   </DIV>
   <DIV>
    <xsl:apply-templates/>
    <DIV>
     <SPAN class="b">
      <xsl:call-template name="entity-ref">
       <xsl:with-param name="name">nbsp</xsl:with-param>
      </xsl:call-template>
     </SPAN>
     <SPAN class="m">
      <xsl:text>&lt;/</xsl:text>
     </SPAN>
     <SPAN>
      <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
      <xsl:value-of select="name(.)"/>
     </SPAN>
     <SPAN class="m">
      <xsl:text>></xsl:text>
     </SPAN>
    </DIV>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template match="*[text() and not (comment() or processing-instruction())]">
  <DIV class="e">
   <DIV STYLE="margin-left:1em;text-indent:-2em">
    <SPAN class="b">
     <xsl:call-template name="entity-ref">
      <xsl:with-param name="name">nbsp</xsl:with-param>
     </xsl:call-template>
    </SPAN>
    <SPAN class="m">
     <xsl:text>&lt;</xsl:text>
    </SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
    <SPAN class="tx">
     <xsl:value-of select="."/>
    </SPAN>
    <SPAN class="m">&lt;/</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
    </SPAN>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template match="*[*]" priority="20">
  <DIV class="e">
   <DIV STYLE="margin-left:1em;text-indent:-2em" class="c">
    <A class="b" href="#" false"
    <SPAN class="m">&lt;</SPAN>
    <SPAN>
     <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
     <xsl:value-of select="name(.)"/>
     <xsl:if test="@*">
      <xsl:text> </xsl:text>
     </xsl:if>
    </SPAN>
    <xsl:apply-templates select="@*"/>
    <SPAN class="m">
     <xsl:text>></xsl:text>
    </SPAN>
   </DIV>
   <DIV>
    <xsl:apply-templates/>
    <DIV>
     <SPAN class="b">
      <xsl:call-template name="entity-ref">
       <xsl:with-param name="name">nbsp</xsl:with-param>
      </xsl:call-template>
     </SPAN>
     <SPAN class="m">
      <xsl:text>&lt;/</xsl:text>
     </SPAN>
     <SPAN>
      <xsl:attribute name="class"><xsl:if test="xsl:*"><xsl:text>x</xsl:text></xsl:if><xsl:text>t</xsl:text></xsl:attribute>
      <xsl:value-of select="name(.)"/>
     </SPAN>
     <SPAN class="m">
      <xsl:text>></xsl:text>
     </SPAN>
    </DIV>
   </DIV>
  </DIV>
 </xsl:template>
 <xsl:template name="entity-ref">
  <xsl:param name="name"/>
  <xsl:text disable-output-escaping="yes">&amp;</xsl:text>
  <xsl:value-of select="$name"/>
  <xsl:text>;</xsl:text>
 </xsl:template>
</xsl:stylesheet>

Так же можно попробовать поискать аналогичные default-схемы xsl-преобразований в Сhrome (chrome://global/content/xml/XMLPrettyPrint.xsl) и других броузерах

Желающие могут скачать пример обработки просмотра и форматирования произвольных XML-файлов (управляемые и обычные формы).

Ноо повторяю, что вся автоматизация отображения произволного XML сводится к двум строчкам текста 1С

Преобразование.ЗагрузитьИзСтроки(ТекстПреобразованияXSL);
XML2HTML = Преобразование.ПреобразоватьИзСтроки(ИсходныйТекстXML);

и использованию подходящей XSL-схемы, которую можно найти как в интернете, так и у себя на локальном компьютере.

Вступайте в нашу телеграмм-группу Инфостарт

XML XSL XSLT HTML

См. также

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

50050 руб.

25.02.2015    188558    360    290    

419

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    161240    971    321    

482

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    34447    259    64    

195

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 2.0 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Налоговый учет Платные (руб)

Перенос данных из БП 2 в БП 3 готовые правила конвертации данных (КД 2), сэкономьте свое время! | Выполнить переход с БП 2 на БП 3 в ситуациях, когда простым обновлением перейти не получается | Переносится вся справочная информация, документы за выбранный период, а также начальные остатки на выбранную дату (то есть можно еще и свертку базы сделать при переносе) | Есть фильтр по организациям при выгрузке данных | Перенос можно проверить перед покупкой прямо на вашем сервере! Обращайтесь за проверкой!

50600 руб.

21.05.2019    58415    81    132    

73

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

58000 руб.

29.10.2018    62999    82    133    

81

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактическим удержаниям, НДФЛ, вычетам, страховым взносам из базы Парус 10 учреждений (далее Парус) в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (далее 1С) и начать с ней работать с любого месяца года.

85400 руб.

05.10.2022    13586    15    8    

16

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    84480    225    178    

162
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. theshadowco 269 08.05.15 11:31 Сейчас в теме
(0) а такой вариант не подойдет?
	#Если НЕ ВебКлиент Тогда
		
		ВремФайл = ПолучитьИмяВременногоФайла("xml");
		ЗаписьXML = Новый ЗаписьXML;
		ЗаписьXML.ОткрытьФайл(ВремФайл);
		ЗаписьXML.ЗаписатьБезОбработки(ТекстСообщения);
		ЗаписьXML.Закрыть();
		
		ОткрытьФорму("ОбщаяФорма.ПросмотрHTML", Новый Структура("ДанныеHTML, Заголовок", ВремФайл, "Просмотр текста сообщения"), ЭтотОбъект);
		
	#КонецЕсли 


Показать

ПросмотрHTML - форма с реквизитом "ДанныеHTML" строкового типа и полем html на форме..
dusenbaev_dv; wzhick; boriszaugolnov; bprogs; ixijixi; +5 Ответить
2. tarassov 114 08.05.15 12:01 Сейчас в теме
(1) theshadowco,
нет. Это "масло масляное". Подали на вход текст XML в ЗаписьXML.ЗаписатьБезОбработки(ТекстСообщения) и с помощью ЗаписьXML.Закрыть() его же и записали. Ничего не изменилось. И не отобразилось
10. theshadowco 269 18.05.15 10:41 Сейчас в теме
(2) Отлично отображается, вы попробуйте :). Не первый год так работает, отображает любые XML.

Как работает у меня:
Есть регистр с реквизитом, содержащим текст XML. Иногда требуется посмотреть XML в более читабельном виде, чем просто строка. Для Этого на форме записи добавлена указанная в примере команда (точнее выдержка из команды), которая создает временный файл и показывает его в форме просмотре. В этой форме (управляемая) нет ничего интересного, кроме строкового реквизита, которому соответствует элемент формы с видом "Полле HTML документа"
Прикрепленные файлы:
11. tarassov 114 18.05.15 11:01 Сейчас в теме
(10) theshadowco,
А что в вашем примере скрыто под конструкцией "ОбщаяФорма.ПросмотрHTML" ?
Давайте вместе посмотрим, что там внутри в этой форме делается
12. tarassov 114 18.05.15 11:05 Сейчас в теме
(10) theshadowco,
В этой форме (управляемая) нет ничего интересного

Надо все-таки смотреть на устройство формы.
По виду снимка вывода можно предположить, что используется OLE-объект
Будет ли Ваша конструкция без переделок работать под Linux?
13. theshadowco 269 18.05.15 11:26 Сейчас в теме
(12) не используется ничего, только платформа.
Смотрите скрины. Проще некуда.
Прикрепленные файлы:
wzhick; FilippSerg; +2 Ответить
14. tarassov 114 18.05.15 13:38 Сейчас в теме
(13) theshadowco,
Может быть тогда что-то дополнительное установлено в настройках операционной системы и ее интернет-броузерах?
15. theshadowco 269 18.05.15 13:43 Сейчас в теме
(14) да нет, все по дефолту.
16. tarassov 114 20.05.15 16:18 Сейчас в теме
(15) theshadowco,
Я наконец понял, что имелось в виду.
Этот пример действительно работает. Но если все делать через файлы (ЗаписьXML.ОткрытьФайл() вместо ЗаписьXML.УстановитьСтроку()) и полю HTMLДокумента соответственно передавать на вход имя файла на диске, а не текст документа.
Я же говорил о другом, пытался показывать принцип работы с текстом файла, т.е. строковые операции, без привлечения файловой системы
frkbvfnjh; binex; FilippSerg; +3 Ответить
3. gaglo 13.05.15 10:06 Сейчас в теме
В статье сразу написано, что
интернет-броузеры умеют отображать текст произвольных XML-документов

Это - по-моему - и есть
решение с минимальными затратами и желательно без программирования

Описанный в статье способ позволяет открыть XML-файл непосредственно в 1С.
Это его единственное преимущество перед открытием в браузере или есть еще достоинства, о коих я не догадался?
4. tarassov 114 13.05.15 10:48 Сейчас в теме
(3) gaglo, да, речь идет только о 1С
5. gaglo 14.05.15 10:12 Сейчас в теме
(4) Ясно. Тогда позволю себе отметить: в публикации infostart.ru/public/21664/ двухпальцовый reader_XML, кстати, перечисленной в списке предшественников, есть ссылка на внешний XML-редактор firstobject, маленький (624к), быстрый (файл в 55 мег открывается секунд за 5), портабельный и бесплатный. Да, и он еще позволяет редактировать!
ЗЫ. А ход вашей мысли (то есть выдрать XSL из браузера и применить у себя) мне нравится!
6. tarassov 114 14.05.15 11:49 Сейчас в теме
(5) gaglo, Так понятно, что вне 1С есть тысяча и одна удабная утилита для работя с XML. Но ведь я специально указал область задачи: "Внутри 1С и без внешних библиотек". В этом случае все "внешние XML-редакторы" остаются "за бортом"
7. gaglo 15.05.15 09:47 Сейчас в теме
(6) А вот это мне и непонятно. Зачем специально было так сужать область задачи? Неужели "просто так"? Иными словами, зачем так часто стоит задача отображать XML именно в поле HTML-документа? Если мы хотим XML обработать, так вроде бы отображать и не надо... Навскидку придумал только случай, когда на входе валятся файлы самых разных структур, мы их показываем оператору и спрашиваем: "Чего с ним делать?" А оператор проглядит его, решает, что этот по алгоритму 15, а этот просто отклонить, и нажимает соответствующую кнопку. Но выглядит это неестественно.
8. tarassov 114 15.05.15 16:44 Сейчас в теме
(7) gaglo,
У меня эта задача возникла из разработки интерфейса отслеживания почтовых отправлений различных служб доставки (СДЭК, Деловые линии, ДПД, ПЭК и т.п.) для интернет-магазина http://automediya.ru/, аналогично тому, как я сделал для Почты России http://infostart.ru/public/347510/
Данные, полученные с с того или ниого вэб-сервиса при этом не требовалось обрабатывать, а только показывать, но в красивом и читаемом виде. Оказалось, что наиболее просто и естественно отобразить их как раз поле HTML-документа
При этом потребовалось обрабатывать исключительные ситуации. А именно, когда код состояния ответа HTML не равен 200. Можно бы было выдать сообщение "КодСостояния=...", но в некотрых случаях в теле ответа приходит содезная информация. Например пришется что-то об ошибке сети, веб-сервиса, прокси и прочее. Вот для таких особых ситуаций универсальный просмотр как раз годится.
Ну а мне еще удобно было им пользоваться при отладке, когда я, в точности как описано выше, имел дело с XML-файлами самих разных структур.
9. tarassov 114 16.05.15 15:24 Сейчас в теме
(5) gaglo,
Если уж сравнивать с аналогами не по принципу соответствия поставленной задаче, а про универсальности и простоте, то мне больше чем "двупальцевый" нравится "однопальцевый" вариант http://infostart.ru/public/84254/
17. yuraer 45 23.09.16 12:38 Сейчас в теме
Похоже, что xsl не валидный:
Ошибка разбора XML: - [296,23]
Фатальная ошибка:
Couldn't find end of Start Tag A line 296
18. NicholasUzunov 18.05.17 08:30 Сейчас в теме
В статье приводиться default.xsl с ошибками. Пример
<A STYLE="visibility:hidden" class="b" false"
Тут тег <A> не закрыт. Рабочий XSL скачал от сюда https://gist.github.com/byrner75/5659000.

А вот не много измененный код:

	
Преобразование = Новый ПреобразованиеXSL;
Преобразование.ЗагрузитьИзФайла("D:\defaultss.xsl");
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(Преобразование.ПреобразоватьИзФайла("D:\WayBillAct.xml"));
Прикрепленные файлы:
defaultss.xsl
japopov; user1290365; CagoBHuK; Nat_S; silberRus; +5 Ответить
20. CagoBHuK 32 09.07.19 12:18 Сейчас в теме
Хотел поставить автору плюс, но не буду, т.к. XSL невалиден. Зато поставил плюс (18).
22. Yashazz 4922 12.10.21 14:37 Сейчас в теме
(18)
Преобразование = Новый ПреобразованиеXSL;
Преобразование.ЗагрузитьИзФайла("D:\defaultss.xsl");
ЭлементыФормы.ПолеHTMLДокумента1.УстановитьТекст(Преобразование.ПреобразоватьИзФайла("D:\WayBillAct.xml"))

И зачем тягать файловую систему? Проще, надёжнее и быстрее этот хсл загнать в макет или вообще пихать как константную строку.
19. maloy-v 06.10.18 15:01 Сейчас в теме
До сих пор актуально. Фишка с непосредственным подсовывание файла в форму HTML в последних релизах перестала работать.
А "Преобразование" работает. Красота!
23. ixijixi 2151 16.03.23 11:28 Сейчас в теме
(19) В 2023 уже обратно заработало)
Прикрепленные файлы:
bprogs; 0x00; +2 Ответить
24. trigor 28 29.10.23 13:55 Сейчас в теме
(23) а у Вас сворачиваются теги XML?
25. ixijixi 2151 29.10.23 17:45 Сейчас в теме
(24) Да, сворачиваются
26. trigor 28 29.10.23 19:02 Сейчас в теме
(25) можите поделиться как Вы это сделали. Что-то у меня не получается.
27. ixijixi 2151 30.10.23 09:00 Сейчас в теме
(26) Нужно реквизиту, содержащему отображение XML, присвоить имя локального файла
Прикрепленные файлы:
XML.epf
0x00; bprogs; +2 Ответить
28. QWEASD888 13.03.24 19:21 Сейчас в теме
(27)
присвоить имя локального файла

А что значит имя локального файла? Можно пример?
29. ixijixi 2151 13.03.24 19:36 Сейчас в теме
30. QWEASD888 13.03.24 19:48 Сейчас в теме
31. ixijixi 2151 14.03.24 08:48 Сейчас в теме
(30) В комментарии 27 прикреплена обработка, там можно подсмотреть реализацию
21. antonio_i 81 14.05.20 17:01 Сейчас в теме
В статье же написано, что получить схему можно по адресу в браузере
Firefox
chrome://global/content/xml/XMLPrettyPrint.xsl
IE
res://msxml3.dll/defaultss.xsl

Актуальная версия Firefox отображает необходимый XSL.

Но может кто знает, где в системе можно этот файл найти, не прибегая к помощи браузеров и интернета?
32. darkinitr0 4 28.08.25 10:47 Сейчас в теме
а кто решил проблему "не отображения пробелов" при выводе XML?
у меня сейчас все идет в одну строчку без пробелов...
Для отправки сообщения требуется регистрация/авторизация