Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > XML::Simple со вложенными тэгами


Автор: Poison 21.6.2007, 09:46
Разобрался как работает XML::Simple с файлами с простой структурой, таких как:
<?xml version='1.0'?>
<employees>
    <employee>
        <name>John Doe</name>
        <age>43</age>
        <sex>M</sex>
        <department>Operations</department>
    </employee>
    <employee>
        <name>Jane Doe</name>
        <age>31</age>
        <sex>F</sex>
        <department>Accounts</department>
    </employee>
    <employee>
        <name>Be Goode</name>
        <age>32</age>
        <sex>M</sex>
        <department>Human Resources</department>
    </employee>
</employees>


А что делать если есть ещё и вложенные тэги, как до них добраться?

Автор: arto 21.6.2007, 09:52
посмотреть структуру через Data::Dumper?

Автор: Poison 21.6.2007, 10:02
arto, мне сами значения надо выцепить

Автор: arto 21.6.2007, 10:09
# perl -MXML::Simple -MData::Dumper -le 'print Dumper XMLin ($ARGV[0])' =(cat)
<?xml version='1.0'?>
<employees>
    <employee>
        <name>John Doe</name>
        <age>43</age>
        <sex>M</sex>
        <department>Operations</department>
    </employee>
    <employee>
        <name>Jane Doe</name>
        <age>31</age>
        <sex>F</sex>
        <department>Accounts</department>
    </employee>
    <employee>
        <name>Be Goode</name>
        <age>32</age>
        <sex>M</sex>
        <department>Human Resources</department>
    </employee>
</employees>
^D
$VAR1 = {
          'employee' => {
                        'Be Goode' => {
                                      'department' => 'Human Resources',
                                      'age' => '32',
                                      'sex' => 'M'
                                    },
                        'John Doe' => {
                                      'department' => 'Operations',
                                      'age' => '43',
                                      'sex' => 'M'
                                    },
                        'Jane Doe' => {
                                      'department' => 'Accounts',
                                      'age' => '31',
                                      'sex' => 'F'
                                    }
                      }
        };

# 

и смотрите путь в хеше до значений.

Автор: Poison 21.6.2007, 10:20
arto, с этим то я разобрался
а как например добраться до массы вот здесь
Код

<?xml version="1.0"?>
<camelids>
    <species name="Camelus dromedarius">
        <common-name>Dromedary, or Arabian Camel</common-name>
               <physical-characteristics>
         <mass>300 to 690 kg.</mass>
    </physical-characteristics>
        <conservation status="no special status">
                    </conservation>
    </species>
    ...
</camelids>


можно код написать, если не сложно

Автор: arto 21.6.2007, 11:58
$VAR1 = {
          'content' => '
    ...
',
          'species' => {
                       'conservation' => {
                                         'status' => 'no special status'
                                       },
                       'common-name' => 'Dromedary, or Arabian Camel',
                       'name' => 'Camelus dromedarius',
                       'physical-characteristics' => {
                                                     'mass' => '300 to 690 kg.'
                                                   }
                     }
        };

следовательно,

$VAR1->{'species'}->{'physical-characteristics'}->{'mass'}

Автор: Poison 21.6.2007, 12:59
arto, ну я так и делаю, а он ничего не выдаёт

Автор: arto 21.6.2007, 14:22
у мну работает:

# perl -MXML::Simple -MData::Dumper -le '$a = XMLin ($ARGV[0]); print $a->{"species"}->{"physical-characteristics"}->{"mass"};' =(cat)
<?xml version="1.0"?>
<camelids>
    <species name="Camelus dromedarius">
        <common-name>Dromedary, or Arabian Camel</common-name>
               <physical-characteristics>
         <mass>300 to 690 kg.</mass>
    </physical-characteristics>
        <conservation status="no special status">
                    </conservation>
    </species>
    ...
</camelids>
^D
300 to 690 kg.
#

Автор: Poison 21.6.2007, 14:47
arto,  smile получилось, спасибо огромное

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)