如何从XML :: Simple的数据结构中提取值?

时间:2009-10-19 22:37:04

标签: xml perl xml-simple

我正在尝试弄清楚如何解析此XML中前2个(<current></current>37%)的61.8F值。我无法理解,因为看起来它们具有相同的字段名称并且都在“传感器”之下......任何帮助都将受到赞赏......

Perl中的代码:

#!/usr/bin/perl

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


$url = 'http://localhostmachine/output/XML/output.xml';

# create object
my $xml = XML::Simple->new();

# read XML file
$data = $xml->XMLin(get($url));

# print output
print Dumper($data);

我正在阅读的XML文件的输出:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="wpman.xsl"?>
<watchport>
<title>
<TxtTitle>Location#1</TxtTitle>
</title>
<sensor>
<type>Combo Sensor (Humidity)</type>
<name>ComboSensor000</name>
<status>OK</status>
<current>37%</current>
<high>42 (10/19/2009 @ 04:05PM)</high>
<low>28 (10/17/2009 @ 11:26AM)</low>
</sensor>
<sensor>
<type>Combo Sensor (Temperature)</type>
<name>ComboSensor000</name>
<status>OK</status>
<current>61.6F</current>
<high>65.8 (10/17/2009 @ 11:26AM)</high>
<low>60.1 (10/19/2009 @ 04:00PM)</low>
</sensor>
<sensor>
<type> </type>
<name> </name>
<status> </status>
<current> </current>
</sensor>
<sensor>
<type>Updated: 10/19/2009 @ 05:47 PM</type>
<name>(Updated every 2 minutes)</name>
<status> </status>
<current> </current>
</sensor>
</watchport>

非常感谢!

2 个答案:

答案 0 :(得分:7)

我认为这就是你想要的。

print $data->{sensor}[0]{current};
print $data->{sensor}[1]{current};

答案 1 :(得分:7)

由于您已经得到了答案,因此以下是您可能会发现有用的链接。

他们很好地介绍了使用引用和复杂数据结构,并提供了大量示例。

我并不是在试图向您抛弃RTFM,请不要以这种方式接受我的回复。 Perl有很多文档,在开始时很难找到他们的方法。 How to RTFM是一个很好的资源,有助于揭开手册的神秘面纱。