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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разбор xml-документов 
:(
    Опции темы
BaldHeaded2
Дата 11.10.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



доброе время суток.

ОС: FreeBSD 5.3
Perl 5

есть xml-документ (encoding="Windows-1251"). названия элементов и атрибутов в нем в кириллице.
не подскажите, отчего парсеры (XML::Simple, XML::XPath, XML::Twig) начинают ругаться, встречая
в параметрах своих методов, кириллицу?
причём именно в параметрах. пробегаясь по элементам в цикле - все нормально.
Код

# XML::Simple
my $tree = $xs->XMLin($xml);
foreach (keys %{$tree}) {
    $_ = Encode::encode('cp1251', $_);
    if ($_ =~ /^объект$/) {
        print $_; # работает
    }
}

XML::Simple.
Код

my $xs = XML::Simple->new(KeyAttr => {
    'объект' => "+аттр",
    'объект_блабла' => "+аттр",
    'объект_блаблабла' => "+аттр"
});

отрабатывает без ошибок, но на парсинг документа никак не отражается.

XML::XPath
Код

my $xp = XML::XPath->new(filename => $xml);
my $nodeset = $xp->find('/объект');

выдает
Query: /объект... ^^^ Invalid query somewhere around here (I think)

XML::Twig
Код

my $t = new XML::Twig(
    TwigHandlers => {
        "объект" => \&object});

выдает
unrecognized expression in handler: 'объект'
PM MAIL   Вверх
nitr
Дата 13.10.2007, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



example1.xml
Код
<?xml version='1.0' encoding='windows-1251'?>
<block path="," page="1"><catalog><categories><пункт имя_аттр="1" count="4620"><имя>Имя1</имя></пункт><пункт имя_аттр="3" count="7799"><имя>Имя2</имя></пункт><пункт имя_аттр="9" count="648"><имя>Имя3</имя></пункт><пункт имя_аттр="5" count="1012"><имя>Имя4</имя></пункт><пункт имя_аттр="8" count="3842"><имя>Имя5</имя></пункт><пункт имя_аттр="4" count="387"><имя>Имя6</имя></пункт><пункт имя_аттр="2" count="1073"><имя>Имя7</имя></пункт><пункт имя_аттр="6" count="48"><имя>Имя8</имя></пункт><пункт имя_аттр="7" count="1388"><имя>Имя9</имя></пункт></categories></catalog></block>


example1.pl
Код

#!/usr/bin/perl
use strict;
use warnings;

use XML::Twig;
use Encode 'encode', 'decode';

open my $flh, '<', 'example1.xml';
local $/;
my $content = <$flh>;
close $flh;

my $_parsexml_categories = sub {
    my ($name) = $_->find_nodes(_encode('имя'));
    my $path = $_->att(_encode('имя_аттр')) if $_->has_atts;
    print encode('cp1251', $name->text."\t".$path)."\n";
};

my $xml_items = XML::Twig->new( twig_roots => { 
        'categories/'._encode('пункт') => $_parsexml_categories,
    });
$xml_items->parse($content);
$xml_items->purge;

sub _encode {
    my $str = shift;
    return decode('cp1251', $str);
}


Цитата
Имя1    1
Имя2    3
Имя3    9
Имя4    5
Имя5    8
Имя6    4
Имя7    2
Имя8    6
Имя9    7


Добавлено через 6 минут и 57 секунд
файл example1.pl сохранён в кодировке windows (cp1251).
Можно обойтись без функции _encode

а заюзать
Код

#!/usr/bin/perl
use strict;
use warnings;
use encoding 'windows-1251';

use XML::Twig;
use Encode 'encode';
...


у вас скорее кодировка KOI8-R, поэтому
Код

use encoding 'koi8-r';



--------------------
PM   Вверх
BaldHeaded2
Дата 15.10.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


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

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


 




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


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

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