我试图从XML文件中提取两个特定属性的值,其结构如下;
<environment>
<applications>
<application1>
<app-config>
<server host="boxA" port="1234"/>
</app-config>
</applicaitons>
</environment>
我希望能够读取属性“host”和“port”的值。
我尝试过使用这段代码,但这对我不起作用。
#!/usr/local/bin/perl -w
use XML::XPath;
my $file = "configuration.xml";
my $xp = XML::XPath->new(filename => $file);
my $hname = $xp->find('/environment/applications/application1/app-config/server/@host');
my $pnumber = $xp->find('/environment/applications/application1/app-config/server/@port');
print $hname;
但是当我运行此命令时,这不会返回任何输出。
提前致谢
答案 0 :(得分:4)
您的XML无效!修复它,它工作正常。
$ perl test.pl
boxA
答案 1 :(得分:4)
始终,始终使用;
启动perl脚本use strict;
在调试时,也要这样做;
use warnings;
这将向您显示您的XML格式不正确。
修复您的XML,它会起作用!
答案 2 :(得分:2)
</applicaitons>
拼写为</applications>
将其替换为XML文档中的内容。
来源很好。
答案 3 :(得分:0)
使用XML:简单。它很简单。
尝试以下代码:
use strict;
use warnings;
use XML::Simple;
my $xml = XMLin( <<XML );
<environment>
<applications>
<application1>
<app-config>
<server host="boxA" port="1234"/>
</app-config>
</applicaitons>
</environment>
XML
print $xml->{"applications"}{"app-config"}{"server"}{"host"} . "\n";
print $xml->{"applications"}{"app-config"}{"server"}{"port"} . "\n";
在您的XML代码段上,您将收到错误,例如:
mismatched tag at line 7, column 9, byte 159 at C:/Perl64/lib/XML/Parser.pm line 187
因为它告诉我标签不匹配,所以我开始检查XML,直到我解决了格式错误的问题,因此我处理XML错误,直到我提出:
use strict;
use warnings;
use XML::Simple;
my $xml = XMLin( <<XML );
<environment>
<applications>
<app-config>
<server host="boxA" port="1234"/>
</app-config>
</applications>
</environment>
XML
print $xml->{"applications"}{"app-config"}{"server"}{"host"} . "\n";
print $xml->{"applications"}{"app-config"}{"server"}{"port"} . "\n";
现在程序产生了预期的结果:
boxA
1234
正如你所看到的,它帮助我快速发现了错误的来源,并且没有额外的配置XML :: Simple对我们都非常喜欢的perl哈希进行了非常自然的映射:-) ...简单。