Имя: Пароль:
1C
 
Как получить ДокументDOM из HTML - страницы?
,
0 ВаликТР
 
15.07.15
14:58
Есть код

ЧтениеХТМЛ = Новый ЧтениеHTML();
Дом = Новый ПостроительDOM;    
ЧтениеХТМЛ.УстановитьСтроку(Тело);
Док = Дом.Прочитать(ЧтениеХТМЛ);

Получаем Док тип ДокументHTML/

А каким образом получить в результате ДокументDOM, чтобы потом xPath можно было использовать?
1 Asmody
 
15.07.15
15:26
ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.ОткрытьФайл(ИмяФайла, "UTF-8");
    ПостроительDOM = Новый ПостроительDOM;
    ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку("UTF-8");
    ЗаписьDOM = Новый ЗаписьDOM;
    ЗаписьDOM.Записать(ДокументHTML.Тело, ЗаписьXML);
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.УстановитьСтроку(ЗаписьXML.Закрыть());
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
    Разименовыватель = Новый РазыменовательПространствИменDOM(ДокументDOM);
    ВыражениеXPath = "//tr/td[@class=""s23""]/../td[@class=""s23""] | //tr/td[@class=""s23""]/../td[@class=""s11""]";
    РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ВыражениеXPath, ДокументDOM, Разименовыватель);
2 Asmody
 
15.07.15
15:28
и вы еще сомневаетесь, что платформу пишут "чужие для хищников"?
3 ВаликТР
 
15.07.15
16:24
(1) Спасибо за помощь (дожить бы до ее конца!)
Но на этой строке

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

Ошибка разбора XML:  - [32,43]
Фатальная ошибка:
EntityRef: expecting ';'

Что нужно проверить?
4 DmitrO
 
15.07.15
16:32
ПостроительDOM.Прочитать
может сразу принимать ЧтениеHTML
5 DmitrO
 
15.07.15
16:33
аа, xpath.. сори туплю :)
6 Лефмихалыч
 
15.07.15
16:53
(2) это на самом деле весьма по-русски - игла в яйце, яйцо в утке, утка в зайце. Традиции у нас крепки просто
7 trad
 
15.07.15
16:55
(6) заяц в шоке
8 Asmody
 
15.07.15
17:03
(3) Можно как-то почистить ДокументHTML.Тело, например, натравить на него НайтиНедопустимыеСимволыXML()
9 Serginio1
 
15.07.15
17:19
10 Гёдза
 
15.07.15
17:24
(1) А так разве нет
ЧтениеHTML = Новый ЧтениеHTML;
    ЧтениеHTML.ОткрытьФайл(ИмяФайла, "UTF-8");
    ПостроительDOM = Новый ПостроительDOM;
    ДокументDOM = ПостроительDOM.Прочитать(ЧтениеHTML);
     Разименовыватель = Новый РазыменовательПространствИменDOM(ДокументDOM);
    ВыражениеXPath = "//tr/td[@class=""s23""]/../td[@class=""s23""] | //tr/td[@class=""s23""]/../td[@class=""s11""]";

    РезультатXPath = ДокументDOM.ВычислитьВыражениеXPath(ВыражениеXPath, ДокументDOM, Разименовыватель);
11 Asmody
 
15.07.15
17:26
(9) Там про шарп, а у нас про 1С.
12 Asmody
 
15.07.15
17:31
(10) При чтении из ЧтениеHTML ПостроительDOM возвращает ДокументHTML. В документации про это очень мутно написано, проверено отладчиком.
13 Serginio1
 
15.07.15
17:33
(11) Шарп элементарно к 1С прикручивается.
14 Asmody
 
15.07.15
17:34
(13) Ваши костыли оставьте при себе.
15 Serginio1
 
15.07.15
17:37
(14) Активно ими пользуюс, а вы инвалиды пилите ПостроительDOM , золотом уже пахнет
16 Котокот
 
15.07.15
17:39
А какая разница между ДокументDOM и ДокументHTML?
17 Asmody
 
15.07.15
18:02
(15) Ненативно — это раз, необходимость тащить ради пары функций полгигабайта .NET со своими тараканами — это два.
18 Serginio1
 
15.07.15
18:09
(17) Вообще то Microsoft.NET почти 2 ГБ. Но он уже установлен на всех Win7 и выше.
А зачем мне натив? У меня линуксов нет и не придвидется.
Но я на раз сделаю кучу вещей, на что 1С не способен как в 7ке так и в 8 ке.
19 Котокот
 
15.07.15
20:44
Я почему спрашивал в чем разница. Сам вот так делаю:

    ЧтениеHTML        = Новый ЧтениеHTML;
    ЧтениеHTML.УстановитьСтроку(СтрокаШаблона.ШаблонТекстHTML);
    ПостроительDOM    = Новый ПостроительDOM;
    ШаблонDOM        = ПостроительDOM.Прочитать(ЧтениеHTML);

Цитата из СП:
ПостроительDOM.Прочитать (DOMBuilder.Read)
ПостроительDOM (DOMBuilder)
Прочитать (Read)
Синтаксис:

Прочитать(<ИсточникДанныхXML>)
Параметры:

<ИсточникДанныхXML> (обязательный)

Тип: ЧтениеУзловDOM, ЧтениеFastInfoset, ЧтениеXML; ЧтениеHTML.
Объект чтения данных XML или чтения данных HTML.
Возвращаемое значение:

Тип: ДокументDOM.

Описание:

Создает документ DOM. Производит чтения документа XML из источника данных XML.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Примечание:

Параметры DOM в созданный документ не переносятся.



Там написано, что возвращаемое значение - ДокументDOM. В Отладчике смотрю - у меня ДокументHTML. Все в нем нормально разбирается, изменяется и т.д. И никаких неудобств не испытываю. Так может я чего-то не знаю? Может мне с DOM будет лучше? Объясните нубу, ЧЯДНТ?
20 Котокот
 
15.07.15
20:46
Может у меня не DOM а HTML потому что в тексте документа в начале стоит
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">?
И все-таки, в чем разница то?
21 ВаликТР
 
15.07.15
23:16
(20) ДокументHTML в ДокументDOM не работает с xPath. Поэтому мне и нужен ДокументDOM.
22 ВаликТР
 
15.07.15
23:18
ПостроительDOM.Прочитать(ЧтениеHTML) возвращает ДокументHTML
ПостроительDOM.Прочитать(ЧтениеXML) возвращает ДокументDOM
23 Котокот
 
16.07.15
11:00
(22) А если ему в заголовке подменить html на xml?
AdBlock убивает бесплатный контент. 1Сергей