|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.08.2011, 19:05 | #1 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
HTML DOM
возникла проблема:
я анализирую html документ сначала писал свой парсер, потом пробовал регулярки а потом когда познакомился поближе с PHP увидел как круто юзать DOM модель документа. На Delphi есть библиотека Инди которая вроде бы как позваляет юзать дом-модельку. Код:
не где толком не нашел литературы обьясняющей на понятном языке как работать с этим. простую задачку где просто выдергивается содиржимое всех тегов например ('td') видел (привожу не весь код а смысл только) Код:
Считать все содержимое тегов(обьектов)-например таблиц, построив списочек всех таблиц, прочитать интересующие меня атрибуты, открыть таблицу, прочитать список (tr) так же посмотреть какие там атрибуты из списка (tr) прочитать список (td) посмотреть значения, атрибуты и далее возможно там еще какие то вложенные элементы есть. прочитать их и т.п. то есть я хочу бродить по всей этой древовидной иерархии, читать значения, атрибуты и т.п. помогите плиз, хотяб ссылочкой, книжечкой(на русском), компонентиком (если есть аналоги круче индейки) иль примерчиком. буду весьма благодарен.
Писано по д'Эльфийски
|
22.08.2011, 19:36 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
начнем с того что насколько я знаю это mshtml, но уж точно не инди.
а инфа есть в гугле: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
22.08.2011, 20:43 | #3 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
да ты прав, просто давно не садился за эту задачу и перепутал просто у меня инди в этом проекте тоже юзается и написание idКомпонент и IHTMLElementCollection легко можно стутать при беглом взгляде.
что то если честно я мне этот компонент не нравится (IHTMLElementCollection). как мне лучше всего работать с DOMом?
Писано по д'Эльфийски
|
22.08.2011, 22:07 | #4 |
Форумчанин
Регистрация: 30.01.2009
Сообщений: 418
|
можно через Webrowser
береш отсюда модуль http://forums.avtograd.ru/index.php?...post&p=1672104 jsWebBrowser подключаеш его в проекте в самом верхнем USES после все остального. после этого стандартный компонент TWebbrowser получит дополнительные методы для работы с JavaScript на странице краткая документация http://jqbook.narod.ru/works/jsWebBrowser.htm Последний раз редактировалось Lesha; 22.08.2011 в 22:16. |
23.08.2011, 01:24 | #5 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
вы наверное меня не правильно поняли мне надо читать DOM модель документа будь это HTML или XML прочитать допустим все обьекты и их атрибуты, потом двинутся внутрь и внутри тега прочитать тоже все а потом еще внутрь и так далее
Писано по д'Эльфийски
|
23.08.2011, 12:44 | #6 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
попробовал XMLDocument
но что то не айс а так то было круто если бы было что то подобное но заточенное под html. постоянно выводятся ошибки. видимо из за не валидности документов. даже на страницу гугла ругается. надо что то по-гибше.
Писано по д'Эльфийски
Последний раз редактировалось Лубышев; 23.08.2011 в 12:51. |
24.08.2011, 00:42 | #7 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
ответов все еще нет а я уже начинаю кое что тута понимать:
допустим считали все tr Код:
Код:
оказывается он тоже может возвращать коллекцию дочерних элементов Код:
цепляем допустим первый Код:
DocElement2.innertext;//вернет содержимое без html тегов DocElement2.innerhtml;//вернет весь внутренний html элемента... только вот когда обращаешься ко вложенным элементам не разобрался еще как обратится только к оптеделенным тегам (игнорить всех кроме td-то есть вернуть коллекцию из td) но зато можно узнать имя элемента DocElement2.tagName то есть можно когда идем в цикле по дочерней коллекции элементов проверять имена и игнорить не нужные. это конечно не круто но хоть так чем вообще ни как чтобы прочитать конкретный атребут элемента можно юзать: DocElement2.getAttribute('name',0) в первом параметре пищем название атрибута какой нам надо а во втором число, котороя я так пока и не понял для чего служит. подставлял любые-ему пофиг "роли не играет" как получить список всех атрибутов пока что не разобрался интересный момент в том что можно даже стиль выдернуть DocElement2.style и там через точку можно прочитать любой атрибут стиля... только почему то не цепляется из файла стилей css. видимо это работает только если стиль задан непосредственно в самом теге. вот интересно кстати а он умеет работать корректно со стилями или нет? если будет перекрытие стилей что он вернет в ответ? если кому интересно могу потом как аучусь написать статейку (так как толком по русски не где не написано как с этим работать)
Писано по д'Эльфийски
Последний раз редактировалось Лубышев; 24.08.2011 в 12:40. |
29.08.2011, 20:27 | #8 |
Участник клуба
Регистрация: 23.07.2007
Сообщений: 1,054
|
блин наткнулся на загвоздку
DocElement.all as IHTMLElementCollection; возвращает все вложенные элементы и все вложения вложенных элементов. то есть независимо от глубины вложений. как мне узнавать эту глубину? то есть наглядный пример если я в таблице ищу <td> и вдруг окажется так что в этой таблице окажется вложена еще одна таблица то он посчитает и её <td>шки.... а мне так не надо. как учитывать глубину вложенности?
Писано по д'Эльфийски
|
02.09.2011, 00:06 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
наверно стоит применить коллекцию детей?
children такую вернет. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DOM php5 | alexander1111 | PHP | 0 | 09.03.2011 22:56 |
TWebBrowser DOM | KASioZ | Работа с сетью в Delphi | 0 | 11.12.2009 07:02 |
Дерево DOM | fclmhooligan | JavaScript, Ajax | 1 | 24.11.2008 14:11 |
DOM. save в IE | badfilin | JavaScript, Ajax | 2 | 01.05.2008 11:20 |
DOM. как передать HTML разметку | badfilin | JavaScript, Ajax | 3 | 26.04.2008 20:25 |