Имя: Пароль:
1C
1С v8
Использование HTTP в 1С.
0 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.
Что именно надо с файлом сделать?
2 SpellKeeper
 
23.10.17
15:29
Конечно, не обязательно. Я в этих технологиях пока нулевой. Нашел пример, попытался что-то похожее сделать.

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

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

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

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

ЧтениеHTML = Новый ЧтениеHTML;
ЧтениеHTML.ОткрытьФайл(имяВыходногоФайла, "UTF-8");
    
ФайлDOM = Новый ПостроительDOM();
HTML = ФайлDOM.Прочитать(ЧтениеHTML);
Узлы = Новый ИтераторУзловDOM(HTML);

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

Всем спасибо.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан