使用DOM进行XML和perl解析-搜索值

使用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

我使用下面的脚本来计算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>

互联网计算
三年
程序设计
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而不是编程。在问题的底部,在标签列表下面的一行,有四个选项:
共享
编辑
关闭
,以及
标记
。其中一个就是你想要的