如何使用perl解析具有属性的XML标记

如何使用perl解析具有属性的XML标记,xml,perl,parsing,foreach,Xml,Perl,Parsing,Foreach,下面是一个XML文件 <?xml version='1.0'?> <employee> <name>Pradeep</name> <age>23</age> <sex>M</sex> <department>Coder</department> </employee> 现在,如果XML文件是

下面是一个XML文件

   <?xml version='1.0'?>
    <employee>
      <name>Pradeep</name>
      <age>23</age>
      <sex>M</sex>
      <department>Coder</department>
    </employee>
现在,如果XML文件是

   <?xml version='1.0'?>
      <employee="risc_31">
       <name>John Doe</name>
       <age>43</age>
       <sex>M</sex>
       <department>Analyst</department>
      </employee>
      <employee="risc_32">
       <name>Pradeep</name>
       <age>23</age>
       <sex>M</sex>
       <department>HR</department>
      </employee>

无名氏
43
M
分析师
普拉迪普
23
M
人力资源
如何在perl中使用foreach循环来实现这一点

注意:XML::Simple对我来说更容易


感谢您的帮助

XML和Perl的问题。看看Mac上的xmllint,我假设linux


将XML视为具有两种类型的数据。。。“数据”和“元数据”,所有匹配的“>ME您的xml无效,您不能

<employee="risc_31">

我知道这个方法,但我想试试我发布查询的方式!这更有趣;)GRD-上面的代码有一个foreach循环。“for”和“foreach”是一样的。没有区别。这是正确的,我的错!我们可以用XML::Simple做吗?!怎么做?@user1817991是的,我确信可以用XML::Simple做,但我没有那种insta因此,对不起,我帮不上忙。如果有更好的替代品,那么生命太短暂,无法使用
XML::Simple
XML::LibXML
在功能方面是最详尽的,
XML::Twig
可能更容易开始).你错了。
XML::Simple
对任何人来说都不容易。谢谢!我只会在这个任务中使用XML::Simple!一旦完成,我肯定会跳到XML::Twig!@Sobrique
data.xml:2: parser error : error parsing attribute name
<employee="risc_31">
     ^
data.xml:2: parser error : attributes construct error
<employee="risc_31">
     ^
data.xml:2: parser error : Couldn't find end of Start Tag employee line 2
<employee="risc_31">
     ^
data.xml:2: parser error : Extra content at the end of the document
<employee="risc_31">
     ^
<?xml version="1.0"?>
<foo>
<employee>
  <wtf>risc_31</wtf>
  <name>John Doe</name>
  <age>43</age>
  <sex>M</sex>
  <department>Analyst</department>
</employee>
<employee>
  <wtf>risc_32</wtf>
  <name>Pradeep</name>
  <age>23</age>
  <sex>M</sex>
  <department>HR</department>
  </employee>
</foo>
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my @xml=new XML::Simple;
my $data=XMLin("data.xml");
print Dumper($data);
$VAR1 = { 
    'employee' => {
        'John Doe' => {
            'wtf' => 'risc_31',
            'sex' => 'M',
            'department' => 'Analyst',
            'age' => '43'
     },  
     'Pradeep' => {
            'age' => '23',
            'wtf' => 'risc_32',
            'sex' => 'M',
            'department' => 'HR'
     }   
  }   
};
for my $key (%{$data}) {
  print $data->{$key} . "\n";
}
<employee="risc_31">
<employee employeeId="risc_31">
<?xml version='1.0'?>
<employee employeeId="risc_31">
  <name>John Doe</name>
  <age>43</age>
  <sex>M</sex>
  <department>Analyst</department>
</employee>
<employee employeeId="risc_32">
  <name>Pradeep</name>
  <age>23</age>
  <sex>M</sex>
  <department>HR</department>
</employee>
use strict;
use XML::LibXML;

my $filename = 'data.xml';
my $parser = XML::LibXML->new();
my $xmldoc = $parser -> parse_file( $filename );

foreach my $employee( $xmldoc -> findnodes( '/employee' ) ) {
  my $employeeId = $employee -> getAttribute( 'employeeId' );

  my $name = $employee -> findnodes( './name' );
  my $age = $employee -> findnodes( './age' );
  my $sex = $employee -> findnodes( './sex' );
  my $department = $employee -> findnodes( './department' );

}

exit 0;