Perl XML解析

Sen*_*mar 0 xml perl

我使用XML :: Simple来解析XML文件.输出是一个哈希值.(使用Data :: Dumper)

示例代码,XML文件在下面给出了输出.

Perl代码:

use XML::Simple;
use Data::Dumper;

$xml = new XML::Simple;

$data = $xml->XMLin("spam.xml");

print Dumper($data);
Run Code Online (Sandbox Code Playgroud)

XML文件内容(输入到解析器)::

<Attach_request>
    <Protocol_discriminator>
        <name> Protocol_discriminator </name>
        <attribute> Mandatory </attribute>
        <type> nibble </type>
        <value> 7 </value>
        <min> 0 </min>
        <max> F </max>
    </Protocol_discriminator>
    <Security_header>
        <name> Security_header </name>
        <attribute> Mandatory </attribute>
        <type> nibble </type>
        <value> 7 </value>
        <min> 0 </min>
        <max> F </max>
    </Security_header>
    <Security_header1>
        <name> Security_header </name>
        <attribute> Mandatory </attribute>
        <type> nibble </type>
        <value> 7 </value>
        <min> 0 </min>
        <max> F </max>
    </Security_header1>
    <Security_header2>
        <name> Security_header </name>
        <attribute> Mandatory </attribute>
        <type> nibble </type>
        <value> 7 </value>
        <min> 0 </min>
        <max> F </max>
    </Security_header2>
    <Security_header3>
        <name> Security_header </name>
        <attribute> Mandatory </attribute>
        <type> nibble </type>
        <value> 7 </value>
        <min> 0 </min>
        <max> F </max>
    </Security_header3>
</Attach_request>
Run Code Online (Sandbox Code Playgroud)

输出::

$VAR1 = {
          'Security_header3' => {
                                'attribute' => ' Mandatory ',
                                'min' => ' 0 ',
                                'value' => ' 7 ',
                                'max' => ' F ',
                                'name' => ' Security_header ',
                                'type' => ' nibble '
                              },
          'Protocol_discriminator' => {
                                      'attribute' => ' Mandatory ',
                                      'min' => ' 0 ',
                                      'value' => ' 7 ',
                                      'max' => ' F ',
                                      'name' => ' Protocol_discriminator ',
                                      'type' => ' nibble '
                                    },
          'Security_header2' => {
                                'attribute' => ' Mandatory ',
                                'min' => ' 0 ',
                                'value' => ' 7 ',
                                'max' => ' F ',
                                'name' => ' Security_header ',
                                'type' => ' nibble '
                              },
          'Security_header' => {
                               'attribute' => ' Mandatory ',
                               'min' => ' 0 ',
                               'value' => ' 7 ',
                               'max' => ' F ',
                               'name' => ' Security_header ',
                               'type' => ' nibble '
                             },
          'Security_header1' => {
                                'attribute' => ' Mandatory ',
                                'min' => ' 0 ',
                                'value' => ' 7 ',
                                'max' => ' F ',
                                'name' => ' Security_header ',
                                'type' => ' nibble '
                              }
        };
Run Code Online (Sandbox Code Playgroud)

我的另一个问题是:

  1. 有没有什么方法可以管理输出的顺序,我在输入XML文件中给出的相同?

Nik*_*ain 6

如果你看到XML :: Simple的文档,它就说明了这一点

XML :: Simple能够呈现一个简单的API,因为它代表您做出一些假设.这些包括:

  1. 您对仅由空格组成的文本内容不感兴趣

  2. 你不介意当事情陷入哈希时,订单就会丢失

  3. 您不希望对生成的XML的格式进行细粒度控制

  4. 您永远不会使用不是合法XML元素名称的哈希键

  5. 您不需要在不同编码之间进行转换的帮助.

对于基于树的解析,您可以选择XML :: Twig的"Perlish"方法和更多基于标准的DOM实现 - 最好是支持XPath的方法.

有关更多详细信息,另请参阅" Perl-XML FAQ ".