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

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

Оффлайн lamerz

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

#Открываем xml
open (IN,"
while ()
{

#....тут парсим регами

#далее insert в базу, все нормално влитает без иероглифов

}

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #16 : 19 Января 2007, 15:32:01 »
Хех, странно..
вот эту строку убери
my $text = decodeFromUTF8(\'windows-1251\',$node->textContent);
нет там УТФ.
Выведи перед инсертом на принт данные, какие они?
А кракозяблы похожи на win1251->koi-8->iso
Есть идея хранить в базе в юникоде, подумай об этом.
В XML::LibXML есть функция encodeToUTF8.
The documentations is your friend

Оффлайн lamerz

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

увлажнители воздуха

Наверно буду в итоге юзать самописный велосипед с регами.

От чего ушел к тому и пришел:)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #18 : 19 Января 2007, 16:18:30 »
Ага, это чистый юникод... Значит XML::LibXML в него преобразует. Интересно. Не делай руками, это не правильно.
Далее decodeFromUTF8 не используем тоже:
Цитировать
This Function transforms an UTF-8 encoded string the specified encoding. While transforms to ISO encodings may cause errors if the given stirng contains unsupported characters, both functions can transform to UTF-16 encodings as well.


Пробуй
use cyrillic qw/utf2win detect/;
utf2win($text);
The documentations is your friend

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Парсер Xml
« Ответ #19 : 19 Января 2007, 16:35:15 »
На сколько мне помнится весе модули работы с XML после открытия файла конвертят в UTF.
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн lamerz

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

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #21 : 19 Января 2007, 17:37:29 »
Код покажи.
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #22 : 19 Января 2007, 17:48:00 »
Вариант с Encode

use Encode;
Encode::from_to($text, "utf8", "cp1251");
The documentations is your friend

Оффлайн lamerz

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


use locale;
use 
POSIX qw(locale_h);
setlocale(LC_ALL"ru_RU.CP1251");

use 
LWP::Simple;
use 
XML::LibXML;
use 
Text::Iconv;
use 
cyrillic qw/utf2win detect/;


use 
DBI;
require \
'includes/submix.pl\';

my $dbh = DBconnect();

$dbh->do("delete from category");

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

print "Content-type: text/html\\n\\n";

#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 $text =utf2win($node->textContent());

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


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

#Вывод в Бр...
print "$attr{id}|$attr{parentId}|$text\\n
";
}


Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Парсер Xml
« Ответ #24 : 19 Января 2007, 18:00:39 »
Вариант с Convert::Cyrillic

use Convert::Cyrillic;

$text = Convert::Cyrillic::cstocs(\'UTF8\', \'WIN\', $text)
The documentations is your friend

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #25 : 19 Января 2007, 18:03:43 »
Спасибо Вам огромное что помогали, буду завтра пробовать на другой машине чтоб узнать вдруг эти глюки только у меня.

Оффлайн lamerz

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 20
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Парсер Xml
« Ответ #26 : 22 Января 2007, 13:11:38 »
Все четно, на другой машине и на другом хостинге тоже самое, я здаюсь LibXml меня победил:)

 

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