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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Perl & XML 
:(
    Опции темы
korob2001
Дата 22.3.2004, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Привет, всем!
Недавно приобрёл книгу Perl & XML. Авторы: Джейсон Макинтош и Эрик Т.Рэй.
В первой главе приводится пример работы модуля XML::Simple, попробовал его реализовать, но ничего не вышло.
Вот так выглядит XML-ФАЙЛ:
Код

<?xml version="1.0"?>
<spam-document version="3.5" timestamp="2002-05-13 15:33:45">
<!- Автоматически генерируется WarbleSoft Spam, версия 3.5 ->
<customer>
    <first-name>Joe</first-name>
    <surname>Wrigley</surname>
    <address>
         <country>USA</country>
         <street>17 Beable Ave.</street>
         <sity>Meatball</city>
         <state>MI</state>
         <zip>82649</zip>
    </address>
    <email>[email protected]</email>
    <age>42</age>
</customer>
<customer>
    <first-name>Henrietta</first-name>
    <surname>Pussycat</surname>
    <address>
         <country>USA</country>
         <street>R.F.D. 2</street>
         <city>Flangerville</city>
         <state>NY</state>
         <zip>83642</zip>
    </address>
    <email>[email protected]</email>
    <age>37</age>
</customer>
</spam-document>

А так вот выглядит Perl-скрипт:
Код

#!/usr/bin/perl -w
use strict;
use warnings;
use XML::Simple;
my $file_xml = '../xml/SpamChucker.xml';
my $cust_xml = XMLin( $file_xml, forcearray => 1 );
foreach my $customer ( @{$cust_xml->{ customer }} ) {
  foreach ( qw|first-name surname| ) {
        $customer->{$_}->[0] = uc( $customer->{$_}->[0] );
  }
}
print XMLout( $cust_xml );
print "\n";

После выполнения программы имена и фамилии должны быть в верхнем регистре, а у меня выводится следующее сообщение:
Цитата

not well-formed (invalid token) at line 3, column 3, byte 87 at D:/usr/site/lib/XML/Parser.pm line 187

Что бы это значило?

Заранее благодарен,
Денис


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
ElectricalStorm
Дата 22.3.2004, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



мне кажется проблема в валидности самого XML


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
korob2001
Дата 23.3.2004, 01:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

мне кажется проблема в валидности самого XML

Мне тоже так кажется, но с другой стороны это ведь пример из книги. hmmm.gif
Сразу же после этих листингов в книге написано:
Примите наши поздравления! Вы написали программу, выполняющую обработку XML-кода, которая, ктому же, хорошо работает. rolleyes.gif Достигнут почти превосходный результат.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 23.3.2004, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Гы, попробовал написать такой XML:
Код

<personnel-record>
  <name>
      <first>rita</first>
      <last>book</last>
  </name>
  <birthday>
      <year>1969</year>
      <month>4</month>
      <day>23</day>
  </birthday>
</personnel-record>

и такой Perl скрипт:
Код

#!/usr/bin/perl -w
use strict;
use warnings;
use XML::Simple;
my $cust_xml = XMLin( "../xml/second.xml", forcearray => 1 );
for my $customer ( @{ $cust_xml->{ name } } ) {
          foreach ( qw( first last ) ) {
               $customer->{ $_ }->[ 0 ] = uc( $customer->{ $_ }->[ 0 ] );
          }
}
print XMLout( $cust_xml );
print "\n";

Всё заработало, на ура.
Только я так и не понял почему.

Если кто-то сможет пояснить причину, пожалуйста пролейте свет на такое поведение программы.

Заранее спасибо.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
ElectricalStorm
Дата 23.3.2004, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что бы в вашем случае XML стал валидным надо заменить спец символы типа @ на соответствующие коды в DTD


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
korob2001
Дата 31.3.2004, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Большое спасибо ElectricalStorm


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
achmed
Дата 9.4.2004, 08:28 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











хы, в xml русские буквы,
<!- Автоматически генерируется WarbleSoft Spam, версия 3.5 ->
а кодировка в шапке не указана,
надо типа этого
<?xml version="1.0" encoding="KOI-8"?>
или убрать русские буквы

  Вверх
korob2001
Дата 10.4.2004, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Удаляю строку с русскими буквами, получаю следующю ошибку:
mismatched tag at line 9, column 25, byte 271 at Z:/usr/site/lib/XML/Parser.pm line 168
sad.gif


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
achmed
Дата 10.4.2004, 19:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











кстати комментарии в xml обзначаются так: <! comment ... -->
а не <! comment ->
как эдесь:
<!- Автоматически генерируется WarbleSoft Spam, версия 3.5 ->

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


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

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


 




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


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

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