Вход | Регистрация


1С:Предприятие ::

Метки: 

Использование HTTP в 1С.

Я
   SpellKeeper
 
23.10.17 - 15:17
Добрый день.
Есть сайт, с которого мне надо затащить данные в 1С.
По запросу я получил xml-файл.
При чтении этого файла выскакивает ошибка:
{Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Прочитать)
    Пока ЧтениеXML.Прочитать() Цикл
по причине:
Ошибка разбора XML:  - [42,8]
Фатальная ошибка:
Opening and ending tag mismatch: link line 31 and head

Ошибка возникает на строке Пока ЧтениеXML.Прочитать() Цикл
Не понимаю, почему.


Вот кусок файла, где происходит сбой.
<!DOCTYPE html>
<html lang="ru">
<head>
    <title>справочник моделей грузовых железнодорожных вагонов \\ МояКолея1520.рф</title>
    <meta name='description' content='
Notice: Undefined index: Descr in /var/www/koleya/data/www/xn--1520-u4d3ahgsb9pe.xn--p1ai/engine/Inclusio/Component/Template/Templates/Elements/Pages/Wagon.php on line 157
 - описание организации в справочнике железнодорожных организаций МояКолея1520.рф' />

    
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width'>
<meta name='description' content='Модели вагонов' />
<meta name='keywords' content='Модели вагонов' />

<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />

<link rel='stylesheet' media='all' href='/files/site/css/default.css'>

<link rel='stylesheet' media='all' href='/files/site/css/style.css?v=1'>
<link rel='stylesheet' media='all' href='/files/site/avtocompleet/jquery.avtocompleet_z.css'>

<script src='/files/site/js/jquery-1.11.2.min.js'></script>
<script src='/files/site/js/main.js'></script>
<script src='/files/site/js/jquery.form_z.js'></script>




    
    <link rel='stylesheet' media='all' href='/files/site/litebox/css/litebox.css'>
    
    <script src='/files/site/litebox/js/litebox.min.js'></script>
    <script src='/files/site/litebox/js/images-loaded.min.js'></script>
    <script src='/files/site/js/more.js'></script>
    
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU"; type="text/javascript"></script>
    <script src="/files/site/js/owl.carousel.min.js"></script>
    <link rel="stylesheet" href="/files/site/css/owl.carousel.css" type="text/css" />

    
</head>

Если судить по [42,8] из ошибки, ошибка произошла на последней строке.
При выводе сообщений в 1С, последней записью вышел элемент из строки <script src='/files/site/litebox/js/images-loaded.min.js'></script>
Это строка 34.
При этом в тексте ошибки есть ссылка на 31 строку (если я правильно понимаю). link line 31 and head

Помогите разобраться, из-за чего возникает ошибка? И как обойти эту проблему.
Переделать файл я не могу, т.к. он входящий.

Версия 1С 8.2.19.130
 
 
   Юрий Лазаренко
 
1 - 23.10.17 - 15:21
(0) А его обязательно через ЧтениеXML читать? Там же html. Открывай как ДокументDOM.
Что именно надо с файлом сделать?
   SpellKeeper
 
2 - 23.10.17 - 15:29
Конечно, не обязательно. Я в этих технологиях пока нулевой. Нашел пример, попытался что-то похожее сделать.

Там 2 операции. Сначала сделать поиск по параметру, а потом выцепить из результата поиска данные (это отдельные ссылки) и уже через них считать нужные данные.
   SpellKeeper
 
3 - 23.10.17 - 15:56
Попробовал читать через DOM. Вылезла та же ошибка.
Т.е. там что-то в файле, что не понимает 1С.
   ИмяФамилия
 
4 - 23.10.17 - 15:58
позовитепрограммиста(C)

html,xml,php,1С
я чтото упустил при перечислении?
   МимохожийОднако
 
5 - 23.10.17 - 16:01
(0) Покажи хотя бы часть кода или функции. Кофе для гадания кончилось.
   igork1966
 
6 - 23.10.17 - 16:02
(0) наверное проблема с кодировкой
   ikea
 
7 - 23.10.17 - 16:04
У Вас файл HTML. Соответственно, читайте и обрабатывайте его как HTML
   igork1966
 
8 - 23.10.17 - 16:05
(0) чего-то я не пойму... у тебя явно не XML
   _Дайвер_
 
9 - 23.10.17 - 16:07
(8) +
   _Дайвер_
 
10 - 23.10.17 - 16:08
Смотри! <!DOCTYPE html>
 
 Рекламное место пустует
   sapphire
 
11 - 23.10.17 - 16:21
(0)
url="мояколея1520.рф";
http=Новый HTTPСоединение(url);
HTTPЗапрос = Новый HTTPЗапрос("/wagon/search");

Ответ=http.ВызватьHTTPМетод("POST",HTTPЗапрос );
ТелоКакСтрока=Ответ.ПолучитьТелоКакСтроку();

ФорматированныйДокумент=Новый ФорматированныйДокумент; 
ФорматированныйДокумент.УстановитьHTML(ТелоКакСтрока,Новый Структура());
Для Каждого Элемент Из ФорматированныйДокумент.Элементы Цикл
    Если ТипЗнч(Элемент)=Тип("ПараграфФорматированногоДокумента") Тогда
        //Сообщить(Элемент.ТипПараграфа);

        Если (""+Элемент.ТипПараграфа)="Нумерованный список" Тогда
            Для Каждого ЭлементЭлемента Из Элемент.Элементы Цикл
                Если (""+ЭлементЭлемента)="ТекстФорматированногоДокумента" Тогда
                    Сообщить(ЭлементЭлемента.Текст);
                КонецЕсли;
            КонецЦикла; 
        КонецЕсли;
    КонецЕсли;    
КонецЦикла;
// А дальше уж сам как-нить разберись
   SpellKeeper
 
12 - 23.10.17 - 16:22
На сколько я понимаю, XML - это формат более низкого уровня, чем HTML.
Это как USB-порт, который описывает электрические характеристики соединения. Но по этому USB можно хоть принтер подключить, хоть мышь, хоть другой комп привязать. А можно и какой-нибудь датчик по CAN-протоколу.
HTML - это протокол данных, XML - это носитель этих данных.
   SpellKeeper
 
13 - 23.10.17 - 16:24
(11). Сейчас попробую.
   Филиал-msk
 
14 - 23.10.17 - 16:26
(12) Нет. Протокол это http. html и xml - формат данных, передающихся по этому протоколу.
   igork1966
 
15 - 23.10.17 - 16:26
(12) Это совершенно разные вещи. Два разных языка разметки.
   SpellKeeper
 
16 - 23.10.17 - 16:32
(14). Т.е. HTML и XML - это разные форматы одного уровня.
   Serginio1
 
17 - 23.10.17 - 16:37
   sapphire
 
18 - 23.10.17 - 16:38
(16) Грубо, там сервер отвечает так, что весь этот список идет одной строкой, кажись 138-ой, кой есть нумерованный список
   sapphire
 
19 - 23.10.17 - 16:38
(17) только .NETа не хватало :)
   sapphire
 
20 - 23.10.17 - 16:39
(17) Там не мультипарт, да и писано на коленке, в принципе, можно и JSON вытащит егда лень однака
   Филиал-msk
 
21 - 23.10.17 - 16:40
(17 Скучно тебе, дядь Сереж, на новой работе, никак тебя 1С не отпускает. Так и хочется тебе вернутся и про свой Ъ вставить...
   SpellKeeper
 
22 - 23.10.17 - 16:41
(11) Пример из 8.3?
В 8.2 я не вижу у объекта Форматированный документ свойства Элементы. У него есть только методы.
   Филиал-msk
 
23 - 23.10.17 - 16:42
(17) Наверно, потому что в 1С ты себя чувствовал о-го-го, а там эхь-эхь-эхь? Нет радости миссионера? (:
   sapphire
 
24 - 23.10.17 - 16:45
(22) Какая пичалька.
Если съедет форматирование или робятки из ентой конторы стиль поменяют, один шишь, хоть xml, хоть html - всё одно загрузка развалится, имхо, смысл же разово загрузить, модели то вагонов поди и не меняются, исчо к тому же, весьма просто - там весь список одной строкой.
   Serginio1
 
25 - 23.10.17 - 17:22
(21,23) Не 1С уже давно отпустило! Но напомнить то о себе стоит. Зря, что ли старался? Кучу труда и времени вбахал.
И чувствую себя тоже Ого-го. Все так же делюсь знаниями.
   Serginio1
 
26 - 23.10.17 - 17:23
(20) Ему нужно разобрать HTML, а с этим прекрасно справляется AngleSharp http://catalog.mista.ru/public/466196/
   Филиал-msk
 
27 - 23.10.17 - 18:10
С этим уже не первый год справляется нативная 1С. Но у нее есть http://lurkmore.to/Фатальный_недостаток
   Serginio1
 
28 - 23.10.17 - 18:45
(27) Угу постоянно были проблемы не только с HTML но и с XML.
Есть уже нормальные инструменты, которые используют миллионы программистов во всем мире.
 Но "Пилите Шура, пилите"
   Филиал-msk
 
29 - 23.10.17 - 18:52
(28) Вот вроде умный дядька, а архитектурные решения строишь как истинный одинэсник. Хотя не, тебе еще есть куда развиваться. Истинные одинэсники в свре время проект прекоммит для хуюнита напилили. Там гит клиент запускал командный интерпретатор, тот запускал питон (жестокая зависимость!), питон запускал сессию 1С, сессия 1С открывала обработку, обработка выгружала из себя екзешник и запускала его. Ну и потом все сворачивалось обратно.
Вот это была интеграция и использование инструментов, которые используют миллионы программистов. А у тебя так, бледно серое подобие.
   Остап Сулейманович
 
30 - 23.10.17 - 19:09
Уже подсказали ТС-у, что у него не XML?
В XML-е вот это вот :
<meta charset='utf-8'>
должно иметь закрывающий тэг </meta>.

А в HTML-е это не обязательно. Посему для разбора ответа от сервера пользовать парсер XML бессмысленно.
   Serginio1
 
31 - 23.10.17 - 21:46
(29) Эх то, что ты видишь, это еще цветочки. То о чем ты пишешь, это очень бледно. У меня и динамическая компиляция, и крдогенерация на 1С, и асинхронные вызовы. Чуть ли не весь инструментарий.
   Филиал-msk
 
32 - 23.10.17 - 21:56
(31) Без использования питона - у тебя попса позорная. Весь мир программирует на питоне!
   ИмяФамилия
 
33 - 24.10.17 - 07:54
(30) тсс
спугнёшь)
 
 
   SpellKeeper
 
34 - 24.10.17 - 09:54
У меня почему-то валится ИтераторУзловDOM прямо при создании. Причем валит 1С.
Код простейший. На последней строке полный краш.
ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл(имяВыходногоФайла, "UTF-8");
    
ФайлDOM = Новый ПостроительDOM();
HTML = ФайлDOM.Прочитать(ЧтениеHTML);
Узлы = Новый ИтераторУзловDOM(HTML);

Приходится вручную текст ковырять. Такой геморрой.
   SpellKeeper
 
35 - 24.10.17 - 10:35
Все. Получилось.
Кроме Итератора есть еще ОбходДереваDOM.
Объект не валится и все, что надо, выбирает.
Дальше дело техники.

Всем спасибо.



Список тем форума
Рекламное место пустует Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует