如何使用perl解析具有属性的XML标记
下面是一个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 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;