HTML::Parser - нужна помощь!! Пожалуйста, помогите, а то тех примеров что в документации мне не хватило. Есть переменная $data, к примеру. В ней содержится HTML-код страницы. Нужно выбрать значение тега <div class="XXX"...>ЗНАЧЕНИЕ</div> Т.е. если имя тега DIV, а class=XXX, то вывести значение тега. Пожалуйста, покажите как это будет. А то у меня не получилось
Вопрос по поводу HTML::Parser все еще открыт. А чере регулярные выражния не могу выбрать. Вот самое "ЗНАЧЕНИЕ" может содержать такие символы: ,./-()" \w \s Я наисал: $text =~ m%<div class="XXX">([\w\s\.,\(\)"-/]+)</div>%g Но не работает. Где ошибка? Что не так? Если писать: $text =~ m%<div class="XXX">(.+)</div>%g То выдается совсем не то, в силу того, что этих тегов на странице много, и таким способом результатом получается все, что содержится между первым открывающим и последним закрывающим тегами на странице. Пожалуйста, помогите!
ЭЭэ ... здесь есть одно НО: Класс [^</div>] имеет префикс ^, что озачает что все что будет после него - нам не нужно, а так это класс, то смотрится КАЖДЫЙ из символов: т.е. / считается для нас как ненужный символ!!! А я выше написал, что / допустим в искомом тексте.
А вот так рабоает как надо: <div class="XXX">([^<]+)</div> Но вот хотелось бы узнать, как же все-таки это делается с помощью HTML::Parser. Если самостоятельно раньше разберусь - опубликую здесь
даже если внутри <div></div> есть другие тэги? Сомнительно мне это... тебе тут прально писали - rtfm, а именно man HTML::Parser. Обычный парсер, осованный на событиях. Создаешь объект $p = HTML::Parser->new(бла-бла-бла); устанавливаешь обработчики событий $p->handler( event => \&subroutine, $argspec ) и обрабатываешь html-документ $p->parse_file("foo.html"); В обработчиках уже определяешь поведение твоего скрипта по событиям открытия и закрытия интересующего тебя тэга.
Нет, конечно эе если теги внутри будут - то, нет. Но просто в моем варианте тегов внутри нет - 100%. По поводу парсера: 1 и 3 понятно. 2 - нет: Когда устанавливается обработчик событий, указывается подпрограмма, которая будет выполнять каки-то действия - \&subroutine. Так? А $argspec - это аргуемнты, которые ей передаются? Что ей нужно передать, чтобы она проверила название тега (tagname) и атрибут, которым в моем случае является класс (class="XXX") - attr ??? И как потом в самой &subroutine к ним обращаться? Как я понял в нее передадутся хеши, и будет в моем случае 2 ключа - имя и атрибут??? И еще: обработчику надо показать, что мне нужен атрибут class, а в самой подпрограмме уже проверять чему он равен XXX или нет. Так? Как это сделать?