使用DOM进行XML和perl解析-搜索值
我使用下面的脚本来计算xml文件中的元素数。 多亏了这里的一位大师,我才可以打印出数字 我只是想知道如何添加另一个函数,它将查找单词“web”,并只打印包含该单词的单元数 谢谢使用DOM进行XML和perl解析-搜索值,xml,perl,dom,Xml,Perl,Dom,我使用下面的脚本来计算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($cour
#!/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>
互联网计算
三年
程序设计
X
互联网
s
我并不推荐使用XML::DOM模块,因为它不支持XPath,速度也不是很快。对于您正在尝试做的事情,我推荐一个支持XPath的模块。最常用的两种是XML::LibXML和XML::Twig
我写了一篇文章,里面有很多例子
对于您的问题,以下内容可能会满足您的要求:
#!/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";
您可以通过了解有关XPath的更多信息,它还链接到,您可以在其中尝试不同的表达式以查看它们的匹配情况。输入文件似乎没有“web”一词。很抱歉,找不到编辑此问题的位置。假设标题中有word web而不是编程。在问题的底部,在标签列表下面的一行,有四个选项:
共享
,编辑
,关闭
,以及标记
。其中一个就是你想要的