html и xpath на Delphi
От: Dimonka Верблюд  
Дата: 25.02.13 11:04
Оценка:
Доброго времени суток!
Возникло желание воспользоваться посиком элементов HTML с помощью XPATH на Delphi и обнаружил, что гугл ничего не подсказывает в этом направлении.
Занимался кто-нибудь подобным вопросом?
Заранее спасибо за любой намёк.
Re: html и xpath на Delphi
От: baranovda Российская Империя  
Дата: 25.02.13 11:14
Оценка: 4 (1)
Здравствуйте, Dimonka, Вы писали:

D>Доброго времени суток!

D>Возникло желание воспользоваться посиком элементов HTML с помощью XPATH на Delphi и обнаружил, что гугл ничего не подсказывает в этом направлении.
D>Занимался кто-нибудь подобным вопросом?
D>Заранее спасибо за любой намёк.

HTML? не знаю. Возьми Sciter. Или скачай LibXml и преврати ill-formed HTML в XML.

Если нужны запросы XPath к XML, то в Delphi 7 так:

(xmlNode.DOMNode as IDomNodeSelect).selectNode(xpath)

Или можно импортировать MSXML.
Или в Delphi поновее использовать дотнетовские классы.
Re[2]: html и xpath на Delphi
От: Dimonka Верблюд  
Дата: 25.02.13 11:47
Оценка:
Здравствуйте, baranovda, Вы писали:

B>HTML? не знаю. Возьми Sciter.

Не совсем понятно, чего это такое..

B>Или скачай LibXml и преврати ill-formed HTML в XML.

Библиотека LibXml2 вроде бы похожа на то, что нужно. Нашёл (вроде бы) даже работу с html. Попробую.

B>Если нужны запросы XPath к XML, то в Delphi 7 так:

B>(xmlNode.DOMNode as IDomNodeSelect).selectNode(xpath)
С этим всё понятно, не хватает только трансформации HTML->XML

B>Или можно импортировать MSXML.

Импортировал, что дальше?

B>Или в Delphi поновее использовать дотнетовские классы.

Это как?
Re: html и xpath на Delphi
От: Mr.Delphist  
Дата: 25.02.13 14:21
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Доброго времени суток!

D>Возникло желание воспользоваться посиком элементов HTML с помощью XPATH на Delphi и обнаружил, что гугл ничего не подсказывает в этом направлении.
D>Занимался кто-нибудь подобным вопросом?
D>Заранее спасибо за любой намёк.

Если Вы зададите этот вопрос на StackOverflow, то там тут же гневно метнут ссылку на эпический тред почему HTML нельзя разбирать через XPath. <B>Потому что <I>вложенность</I> тегов <U>не</B> обязательна</U> в HTML, в отличие от XML

Т.е. в общем виде Ваша задача не решается — разве что с рядом существенных оговорок.
Re[2]: html и xpath на Delphi
От: Dimonka Верблюд  
Дата: 25.02.13 14:52
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Если Вы зададите этот вопрос на StackOverflow, то там тут же гневно метнут ссылку на эпический тред почему HTML нельзя разбирать через XPath. <B>Потому что <I>вложенность</I> тегов <U>не</B> обязательна</U> в HTML, в отличие от XML


MD>Т.е. в общем виде Ваша задача не решается — разве что с рядом существенных оговорок.


Можно сколько угодно гневно об этом говорить, но это работает и работает суперски. Посмотри хотя бы на FirePath для Firefox. Вот хотелось бы не отставать от цивилизованного мира.
Re[2]: Достижения демократии
От: baranovda Российская Империя  
Дата: 25.02.13 15:40
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Т.е. в общем виде Ваша задача не решается — разве что с рядом существенных оговоро


да и шут с ним, с общим видом) утилиты типа tidy, libxml и html agility pack на 99 процентов с задачей нормализации невалидного хтмл вполне справляются
Re[3]: Достижения демократии
От: baranovda Российская Империя  
Дата: 25.02.13 15:43
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Здравствуйте, baranovda, Вы писали:


B>>HTML? не знаю. Возьми Sciter.

D>Не совсем понятно, чего это такое..

это суперская штука

B>>Или в Delphi поновее использовать дотнетовские классы.

D>Это как?

managed + html agility pack + system.xml
Re[2]: html и xpath на Delphi
От: Dimonka Верблюд  
Дата: 25.02.13 17:34
Оценка:
Здравствуйте, baranovda, Вы писали:

B>Или скачай LibXml и преврати ill-formed HTML в XML.

LibXml2 помог, только приходится вручную чистить некоторые его ляпы на выходе.

B>Если нужны запросы XPath к XML, то в Delphi 7 так:


B>(xmlNode.DOMNode as IDomNodeSelect).selectNode(xpath)


Оказывается запросы не делаются, если в элементе документа есть следующая магическая строчка: xmlns="http://www.w3.org/..

В остальном, вроде кое как работает. Спасибо!
Re[3]: html и xpath на Delphi
От: baranovda Российская Империя  
Дата: 25.02.13 17:49
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Оказывается запросы не делаются, если в элементе документа есть следующая магическая строчка: xmlns="http://www.w3.org/..


Да, с пространствами имен там беда. Можно обойти выражениями типа 'node()[local-name() = "div"]', но лучше взять нормальный парсер.
Re[4]: Достижения демократии
От: alive Россия  
Дата: 26.02.13 04:36
Оценка:
Здравствуйте, baranovda, Вы писали:

B>>>HTML? не знаю. Возьми Sciter.

D>>Не совсем понятно, чего это такое..

B>это суперская штука


Обертка для Delphi у него есть?
Keep yourself alive
Re[5]: Достижения демократии
От: baranovda Российская Империя  
Дата: 26.02.13 05:50
Оценка:
Здравствуйте, alive, Вы писали:

A>Обертка для Delphi у него есть?


AxSciter (ActiveX) с исходниками на С++/ATL. Допиливается очень легко.
Re[3]: html и xpath на Delphi
От: Mr.Delphist  
Дата: 26.02.13 09:21
Оценка:
Здравствуйте, Dimonka, Вы писали:

D>Можно сколько угодно гневно об этом говорить, но это работает и работает суперски.


Вы уже показывали этот код своему QA team?
Re[4]: html и xpath на Delphi
От: Dimonka Верблюд  
Дата: 26.02.13 11:36
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

D>>Можно сколько угодно гневно об этом говорить, но это работает и работает суперски.


MD>Вы уже показывали этот код своему QA team?


Во-первых я говорил не о своём коде, а во вторых да, показавыл. Мой QA тим в моём лице одобрил.
Всё же xpath в качестве парсера для собиралки информации из html просто незаменим.
Но готов, конечно, послушать и алтернативные мнения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.