【发布时间】:2015-06-04 19:42:08
【问题描述】:
对于我的问题,我让用户输入一个字符串来搜索提供者,然后提供者以及一些选择计划信息出现在控制台中。但是,我不知道如何打印出选择的提供者 + 所需的其他信息。
例如:
沃达丰|| 12 个月 || 120GB
沃达丰|| 24 个月 || 200GB
我已经开始并且不太介意刺痛输入,因为我稍后会弄清楚,但我找不到如何首先搜索选择的提供程序然后打印信息。每个提供者和所有信息都在一个
XML 文件
<plans>
<internet>
<plan>
<technology>ADSL2+</technology>
<length>12</length>
<provider>Vodafone</provider>
<price>60</price>
<mincost>600</mincost>
<data>120</data>
<shaping>128</shaping>
<homebundle>true</homebundle>
</plan>
<plan>
<technology>ADSL2+</technology>
<length>12</length>
<provider>Telstra</provider>
<price>80</price>
<mincost>800</mincost>
<data>200</data>
<shaping>256</shaping>
<homebundle>true</homebundle>
</plan>
(etc.)
还有当前的 Perl 文件
use XML::DOM;
my $dom_obj;
my $xml_file= shift;
my $parser = new XML::DOM::Parser;
die "Unable to parse XML document\n" unless $dom_obj = $parser->parsefile($xml_file);
my @nodes = $dom_obj->getElementsByTagName("plan"); #return list of objects of 'Plan'
foreach $elem (@nodes) #for each 'Plan' object
{
foreach $child ($elem->getChildElements) #should return each element under plan?
{
print $child->getNodeValue; #should print elements
print " ";
}
print "\n";
}
我尝试了一个 if 语句,以为我很接近,但只收到错误。
foreach $elem (@nodes)
{
if($elem->getElementByTagName("provider")->getFirstChild->getNodeValue =~ /Vodafone/){
print "$unit->getElementByTagName("provider")->getFirstChild->getNodeValue";
print " || ";
print "$unit->getElementByTagName("length")->getFirstChild->getNodeValue";
print " || ";
任何帮助将不胜感激:)
【问题讨论】:
-
你必须使用 XML::DOM 吗?