Автор Тема: Парсер Xml  (Прочитано 14849 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« : 19 Января 2007, 11:32:34 »


use LWP::Simple;
use 
XML::LibXML;
use 
Text::Iconv;
use 
Mysql;
require \
'connect.pl\';

my $dbh = DBconnect();


# Выполнение запроса
$dbh->do("$insert") || die(print"Mysql error: $DBI::errstr\\n");

my $converter = Text::Iconv->new("utf-8", "windows-1251");

#my $XMLTEXT=get(\'http://mixmarket.biz/mixmldirect.plx?id=4294967238\');
#if(!$XMLTEXT){warn ("Проблемы с $XMLURL");exit;}

my $parser = XML::LibXML->new();
my $doc=$parser->parse_file(\'xml/TEMP.xml\');
my $results = $doc->findnodes(\'//categories/category\');
foreach my $node ($results->get_nodelist)
{

#пробовал и так
 my $text = decodeFromUTF8(\'windows-1251\',$node->textContent);

#и так тоже
#my $text = $converter->convert($node->textContent());

 my @attrs=$node->attributes();
 my (%attr,%TAGS)=();
 foreach (@attrs)
 {
  $attr{$_->getName()}=$_->getValue();
 };


## Формируем запрос
my $insert = "INSERT INTO category VALUES (".$attr{id}.",\'".$attr{parentId}."\',\'".$text."\')";
## Выполнение запроса
$dbh->do("$insert");

}




Проблема моя в том что после insert в базе вмеcто русских букв хрень типа иероглифов:(

но если сделать print в браузер все ok

в чем проблема?

--------------------------
и тишина:)

Може я вопрос задал тупо или что?
« Последнее редактирование: 19 Января 2007, 12:21:54 от lamerz »

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #1 : 19 Января 2007, 12:23:30 »
сделайте из mysql консоли
\\s
и
show create table category

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #2 : 19 Января 2007, 12:29:09 »
CHARSET=cp1251

Если Вы про локаль.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #3 : 19 Января 2007, 12:34:47 »
use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, "ru_RU.CP1251");

в самый вверх.

Еще было-бы неплохо знать кодировку TEMP.xml
The documentations is your friend

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #4 : 19 Января 2007, 12:55:27 »
Цитировать
NeoNox:
use locale;
use POSIX qw(locale_h);
setlocale(LC_ALL, "ru_RU.CP1251");

в самый вверх.

Это сделал но не помогает:(

Еще было-бы неплохо знать кодировку TEMP.xml


Кодировка в основном указана как

но я так понимаю что может и ошибочная.

Да еще пробовал парсить через самописный парсер
все нормално в базу забивает.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #5 : 19 Января 2007, 13:00:31 »
С выставленной локалью не помогло?

установи cyrillic

use cyrillic qw/convert detect/;

print detect $text;
The documentations is your friend

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #6 : 19 Января 2007, 13:51:51 »
установил Cyrillic,

а как им пользоваться?

Чето у меня не как не выходит.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #7 : 19 Января 2007, 14:13:15 »
Не Cyrillic а cyrillic
http://backpan.cpan.org/modules/by-module/namespace/AMICHAUER/cyrillic-2.09.tar.gz

как использовать я выше написал.

Два раза спросил про выставленную локаль, третий спрашивать не буду, но и помогать дальше тоже.
The documentations is your friend

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #8 : 19 Января 2007, 14:24:29 »
Цитировать
NeoNox:
Не Cyrillic а cyrillic
http://backpan.cpan.org/modules/by-...lic-2.09.tar.gz

как использовать я выше написал.

Два раза спросил про выставленную локаль, третий спрашивать не буду, но и помогать дальше тоже.


1)Локаль не помогла я вроде уже выше написал.

2)именно его я и поставил,

как я понял detect определяет кодировку?

а далее что?

3)Ну и ладно буду сам парится, спасибо.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #9 : 19 Января 2007, 14:29:46 »
1) ГДЕ?! В скрипте выставил?
2) именно, detect определяет кодировку.
дальше, поведайте что сказал detect на строку из файла.
3) спокойнее
The documentations is your friend

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #10 : 19 Января 2007, 14:38:12 »
Локаль в самом верху как обычно.

detect сказал 1251

дышу ровно:)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #11 : 19 Января 2007, 14:42:53 »
Отлично, вот видишь, проблема локализована. Слегка.
А теперь сделай выборку из базы и этим же самым detect узнай кодировку(не забудь сюда сообщить). Похоже, проблема с модулем DBI который перекодирует в исо.
The documentations is your friend

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #12 : 19 Января 2007, 14:51:11 »
Не select из DBI тоже сказал 1251

хотя иероглифы вида: ìèîñòèìóëÿòîðû

мне думается что проблема порылась в LibXML


Это я ошибся сильно извеняюсь
выдает 2858
« Последнее редактирование: 19 Января 2007, 15:28:54 от lamerz »

Оффлайн sickboy

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 70
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #13 : 19 Января 2007, 14:58:44 »
Попробуйте сразу после соединения с БД отправить запросы:
set character_set_client=\'cp1251\'
set character_set_results=\'cp1251\'
set collation_connection=\'cp1251_general_ci\'

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #14 : 19 Января 2007, 15:00:07 »
Да это уже стоит, пробовал и убрать.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28