我正在使用XML::Simple
解析XML文件。有没有办法从XML获取树形式?如果是这样,请通过示例解释或建议CPAN包。
我想知道在column
之后我必须处理哪个标记,依此类推。
标签没有序列。 column
标记可以多次出现在Table
或display_name
之后。
Tab
column
Table
column
display_name
column
display_name
XML:
<Tab>
<column>
<display_name>xyz</display_name>
<display_name>pqr</display_name>
</column>
<Table>
<column><display_name>Department</display_name></column>
</Table>
<display_name>abc</display_name>
<column>pwd</column>
<display_name>jack</display_name>
</Tab>
输出XML :: Simple:
$VAR1 = {
'Table' => {
'column' => {
'display_name' => 'Department'
}
},
'display_name' => [
'abc',
'jack'
],
'column' => [
{
'display_name' => [
'xyz',
'pqr'
]
},
'pwd'
]
};
预期o / p:
$VAR1 = {
'column' => {
'display_name' => [
'xyz',
'pqr'
]
}
'Table' => {
'column' => {
'display_name' => 'Department'
}
},
'display_name' => 'abc',
'column' => 'pwd',
'display_name' =>'jack'
};
我知道使用相同键的哈希是不可能的。请建议一种方法,我可以保持标签序列,并能够打印它们。
答案 0 :(得分:5)
XML :: LibXML创建一个没有信息丢失的树。
use XML::LibXML qw( );
my $parser = XML::LibXML->new();
my $tree = $parser->parse_file($qfn);
您可以从那里生成您指定的输出。 (我不知道你为什么要这样做,因为你想输出的Perl代码如果运行就会丢失数据。)
答案 1 :(得分:2)
我将XML::Parser用于同一个文件
#!/usr/sbin/perl
use XML::Parser;
use Data::Dumper;
use strict;
my $Filename = "abc.xml";
my $Parser = new XML::Parser( Style => 'tree' );
my $Tree = $Parser->parsefile( $Filename );
print Dumper( $Tree );
如果有其他方法可以获得所需的输出,请建议。