Здравствуйте, 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 поновее использовать дотнетовские классы.
Доброго времени суток!
Возникло желание воспользоваться посиком элементов HTML с помощью XPATH на Delphi и обнаружил, что гугл ничего не подсказывает в этом направлении.
Занимался кто-нибудь подобным вопросом?
Заранее спасибо за любой намёк.
Здравствуйте, 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 поновее использовать дотнетовские классы.
Это как?
Здравствуйте, Dimonka, Вы писали:
D>Доброго времени суток! D>Возникло желание воспользоваться посиком элементов HTML с помощью XPATH на Delphi и обнаружил, что гугл ничего не подсказывает в этом направлении. D>Занимался кто-нибудь подобным вопросом? D>Заранее спасибо за любой намёк.
Если Вы зададите этот вопрос на StackOverflow, то там тут же гневно метнут ссылку на эпический тред почему HTML нельзя разбирать через XPath. <B>Потому что <I>вложенность</I> тегов <U>не</B> обязательна</U> в HTML, в отличие от XML
Т.е. в общем виде Ваша задача не решается — разве что с рядом существенных оговорок.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Если Вы зададите этот вопрос на StackOverflow, то там тут же гневно метнут ссылку на эпический тред почему HTML нельзя разбирать через XPath. <B>Потому что <I>вложенность</I> тегов <U>не</B> обязательна</U> в HTML, в отличие от XML
MD>Т.е. в общем виде Ваша задача не решается — разве что с рядом существенных оговорок.
Можно сколько угодно гневно об этом говорить, но это работает и работает суперски. Посмотри хотя бы на FirePath для Firefox. Вот хотелось бы не отставать от цивилизованного мира.
Здравствуйте, Mr.Delphist, Вы писали:
MD>Т.е. в общем виде Ваша задача не решается — разве что с рядом существенных оговоро
да и шут с ним, с общим видом) утилиты типа tidy, libxml и html agility pack на 99 процентов с задачей нормализации невалидного хтмл вполне справляются
Здравствуйте, 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/..
Здравствуйте, Dimonka, Вы писали:
D>Оказывается запросы не делаются, если в элементе документа есть следующая магическая строчка: xmlns="http://www.w3.org/..
Да, с пространствами имен там беда. Можно обойти выражениями типа 'node()[local-name() = "div"]', но лучше взять нормальный парсер.
Здравствуйте, Mr.Delphist, Вы писали:
D>>Можно сколько угодно гневно об этом говорить, но это работает и работает суперски.
MD>Вы уже показывали этот код своему QA team?
Во-первых я говорил не о своём коде, а во вторых да, показавыл. Мой QA тим в моём лице одобрил.
Всё же xpath в качестве парсера для собиралки информации из html просто незаменим.
Но готов, конечно, послушать и алтернативные мнения.