我使用以下脚本来计算xml文件中的元素数量。 感谢这里的一位大师,我可以打印这个号码。
只想知道如何添加另一个功能,它会查找单词“web”并仅打印包含该单词的单位数?
感谢。
#!/usr/bin/perl -w
use strict;
use XML::DOM;
my $course_file= shift;
my $parser = new XML::DOM::Parser;
my $course = $parser->parsefile($course_file);
my @units = $course->getElementsByTagName("title");
foreach my $u (@units)
{
foreach my $child ($u->getChildNodes)
{
if ($child->getNodeName eq "internet")
{
$u->removeChild($child);
}
}
}
print(scalar(@units),"\n");
示例XML:
<course>
<name>Internet Computing</name>
<duration>3 years</duration>
<unit>
<title>Programming</title>
<lecturer>
<surname language="English">X</surname>
</lecturer>
</unit>
<unit>
<title>Internet</title>
<lecturer>
<surname>S</surname>
</lecturer>
</unit>
</course>
答案 0 :(得分:2)
XML :: DOM模块实际上不是我推荐的模块,因为它不支持XPath,并且速度不是很快。对于你想要做的事情类型,我建议一个支持XPath的模块。最常用的两个是XML :: LibXML和XML :: Twig。
我写过tutorial for using XML::LibXML,其中包含大量示例。
对于您的问题,以下内容可能符合您的要求:
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
use XML::LibXML;
my $course_file= shift;
my $dom = XML::LibXML->load_xml(location => $course_file);
my @matches = $dom->findnodes('//unit[contains(./title, "Programming")]');
my $count = @matches;
say "Total matching units: $count";
您可以使用examples page了解有关XPath的更多信息,该XPath sandbox也链接到https://github.com/angular/angular/issues/5412,您可以在其中尝试使用不同的表达式来查看它们匹配的内容。