在使用Mojo :: DOM处理HTML文档时,如何最可靠地保留HTML实体?


浮华丶
2025-03-13 09:21:13 (1月前)
  1. 我正在使用Mojo :: DOM来识别和打印数百个HTML文档中的短语(意思是所选HTML标签之间的文本字符串),这些HTML文档是我从Movable Type中的现有内容中提取的......

2 条回复
  1. 0# 老人与海 | 2019-08-31 10-32



    看起来当您映射到文本时,您可以替换XML实体,但是当您使用节点并使用其内容时,将保留实体。这个最小的例子:



    1.   #!/usr/bin/perl
    2. use strict;
      use warnings;
      use Mojo::DOM;

    3. my $dom = Mojo::DOM->new(‘

      this & "that"

      ‘);
      for my $phrase ($dom->find(‘p’)->each) {
      print $phrase->content(), \n”;
      }

    4. </code>


    打印:




    1. this & "that"

    2. </code>


    如果你想保持循环和地图,请替换

    map(‘text’)



    map(‘content’)

    像这样:




    1. for my $phrase ($dom->find(‘p’)->map(‘content’)->each) {

    2. </code>


    如果您有嵌套标签并且只想查找文本(但不打印那些嵌套标签名称,只打印它们的内容),则需要扫描DOM树:



    1.   #!/usr/bin/perl
    2. use strict;
      use warnings;
      use Mojo::DOM;

    3. my $dom = Mojo::DOM->new(‘

      this & "that"

      done

      ‘);

    4. for my $node (@{$dom->find(‘p’)->to_array}) {
      print_content($node);
      }

    5. sub printcontent {
      my ($node) = @
      ;
      if ($node->type eq text”) {
      print $node->content(), \n”;
      }
      if ($node->type eq tag”) {
      for my $child ($node->child_nodes->each) {
      print_content($child);
      }
      }
      }

    6. </code>


    打印:




    1. this &

      that

      done

    2. </code>

登录 后才能参与评论