【发布时间】:2020-06-15 07:04:06
【问题描述】:
对于下面的check1.xml
<root>
<setup name = "abc" version="1.1.1>
<func>
<comp name = "cba">
<check>type</check>
</comp>
</func>
</setup>
</root>
我可以使用以下内容提取 comp 的字段内容
my $lib = "check1.xml";
my $simple = XML::Simple->new();
my $tree = $simple->XMLin($lib);
print $tree->{setup}->{func}->{comp}->{name} ;
有了这个,我可以打印“cba”。我用 Dumper 函数打印了 $tree 以获取哈希,并且我能够构造语法来打印相同的内容。 p>
但是,当我有多个 comp 标签时,我遇到了问题。
<root>
<setup name = "abc" version="1.1.1">
<func>
<comp name = "cba">
<check>type</check>
</comp>
<comp name = "cdf">
<check>semi</check>
</comp>
<comp name = "mno">
<check>auto</check>
</comp>
<comp name = "xyz">
<check>manual</check>
</comp>
</func>
</setup>
</root>
我如何在此处获取值,因为我什么时候为此转储散列,我没有得到相同的标签,因为我没有看到我可以在散列中访问任何元素以获取我需要的信息。
$VAR1 = {
'setup' => {
'func' => {
'comp' => {
'cdf' => {
'check' => 'semi'
},
'mno' => {
'check' => 'auto'
},
'cba' => {
'check' => 'type'
},
'xyz' => {
'check' => 'manual'
}
}
},
'name' => 'abc',
'version' => '1.1.1'
}
};
我想从上面的哈希中提取 comp 名称值到一个数组。有人可以在这里给我一些指示。 即获取 cdf、mno、xyz、cba...
【问题讨论】:
-
正如 Grinnz 所说,不要使用 XML::Simple。我是 XML::Simple 的作者,我同意这很糟糕。我写了这个guide to using XML::LibXML 来帮助人们摆脱 XML::Simple。
-
谢谢。会记住这一点。
-
嗨,格兰特,我查看了您的指南,非常有帮助。我可以用你的例子解决我的问题。