Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг XML-RSS-RDF, теги с двоеточиями 
:(
    Опции темы
des00
Дата 24.5.2011, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



Добрый день, что-то я туплю наверное. 
Имеем вот такой RSS (от twitterа)

Код

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:georss="http://www.georss.org/georss" xmlns:twitter="http://api.twitter.com">
  <channel>
    <title>Twitter / USERNAME</title>
    <link>http://twitter.com/USERNAME</link>
    <atom:link href="https://twitter.com/statuses/user_timeline/USERNAME.rss" rel="self" type="application/rss+xml"/>
    <description>Twitter updates fromblablabla</description>
    <language>en-us</language>
    <ttl>40</ttl>
  <item>
    <title>блаблаблабла</title>
    <description>блаблаблабла</description>
    <pubDate>Mon, 23 May 2011 09:15:32 +0000</pubDate>
    <guid>http://twitter.com/URL</guid>
    <link>http://twitter.com/URL</link>
    <twitter:source>&lt;a href=&quot;http://foursquare.com&quot; rel=&quot;nofollow&quot;&gt;foursquare&lt;/a&gt;</twitter:source>
    <georss:point>57.14987334 65.51693398</georss:point>
    <twitter:place xmlns:georss="http://www.georss.org/georss">
      <twitter:id>37832387adecec</twitter:id>
      <twitter:name>ТВИТТЕРНАМЕ</twitter:name>
      <twitter:full_name>ТВИТЕРРФУЛЛНАМЕ</twitter:full_name>
      <twitter:place_type>city</twitter:place_type>
      <twitter:url>http://api.twitter.com/1/geo/id/URL</twitter:url>
      <twitter:attributes/>
      <twitter:bounding_box>
        <georss:polygon>56.994673 65.2612523 56.994673 65.8524368 57.3066131 65.8524368 57.3066131 65.2612523</georss:polygon>
      </twitter:bounding_box>
      <twitter:country code="RU">Russia</twitter:country>
    </twitter:place>
  </item>
..
</channel>
</rss>


парсю с помощью RSS::XML::Parser (крайне желательно юзать его, т.к. если будет другой модуль, придется переписывать в скрипт в других местах)

необходимо получать значение в тегах с двоеточием, для это регистрирую новый namespace и вроде как работает

Код

#!/usr/bin/perl -w

use strict;

use XML::RSS::Parser;
use FileHandle;

XML::RSS::Parser->register_ns_prefix('georss','http://www.georss.org/georss'); # register the geo ns

my $p = XML::RSS::Parser->new;
my $fh = FileHandle->new('./myrss.rss');
my $feed = $p->parse_file($fh);

 foreach my $i ( $feed->query('//item') ) {
        my $node = $i->query('georss:point');
        if (defined($node)){ print '  '.$node->text_content."\n"}
}


но если надо спуститься на уровень ниже , в <twitter:place>, то все встает колом

Код

#!/usr/bin/perl -w

use strict;

use XML::RSS::Parser;
use FileHandle;

XML::RSS::Parser->register_ns_prefix('georss','http://www.georss.org/georss'); # register the geo ns
XML::RSS::Parser->register_ns_prefix('twitter','http://twitter.com'); # regis/ter the geo ns

my $p = XML::RSS::Parser->new;
my $fh = FileHandle->new('./myrss.rss');
my $feed = $p->parse_file($fh);

 foreach my $i ( $feed->query('//item') ) {
        my $node = $i->query('georss:point');
        if (defined($node)){ print '  '.$node->text_content."\n"}
        foreach my $ii ( $feed->query('///twitter:place')) {
                my $node = $ii->query('twitter:full_name');
                if (defined($node)){ print '  '.($node->text_content)."\n"}
                }
}


Bad call to match: '/twitter:place' contains unknown token '' at /usr/lib/perl5/site_perl/5.8.8/XML/RSS/Parser/Element.pm line 31

что не так?

PM MAIL   Вверх
arto
Дата 25.5.2011, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



//twitter:place ?
PM MAIL ICQ   Вверх
des00
Дата 25.5.2011, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 8.9.2008

Репутация: нет
Всего: нет



Вы думаете я не пробовал? )))
PM MAIL   Вверх
arto
Дата 25.5.2011, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



# perl  a.pl twitter.xml
  57.14987334 65.51693398  
#
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0409 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.