Как вставить строки в определенное место в файле, используя скрипт Perl - PullRequest
0 голосов
/ 18 марта 2019

это моя проблема. Я пытаюсь прочитать файл HTML (index.html), а затем найти все ссылки и вставить его во второй файл с именем salida.html, я прочитал этот ответ , я прочиталэтот ответ, и я пытался это сделать, но это не сработало для меня.Это мой Perl-код:

use strict;
use warnings;
use 5.010;
use Tie::File;

my $entrada='index.html';
my $salida='salida.html';
open(A,"<$entrada");
my @links;  
foreach my $linea (<A>){
    print "Renglon => $linea\n" if $linea =~ m/a href/;
    #print $B $linea if $linea =~ m/a href/;
    push @links, $linea if $linea =~ m/a href/;
}

tie my @resultado, 'Tie::File', 'salida.html' or die "Nelson";
for (@resultado) {
    if ($_ =~ m/<main class="contenido">/){
        foreach my $found (@links){
            $_ .= '<br/>'.$found;
        }
        last;
    }
}
close(A);

Мой Perl-код работает без проблем, но в моем коде я пытаюсь написать ссылки, которые у меня есть, в моей переменной $ links в определенной части моегоsalida.html file:

<!DOCTYPE html>
<html lang="es-mx">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Resultados de la busqueda</title>
    <link rel="stylesheet" href="style-salida.css">
</head>

<body>
    <div class="contenedor">
        <header class="header">
            <h2>Resultados de la busqueda</h2>
        </header>
        *<main class="contenido">

        </main>*
        <footer class="footer">
            <h4>
                Gerardo Saucedo Arevalo - 15092087 - Topicos selectos de tecnologias web - Búsqueda de enlaces dentro de
                una página web
            </h4>
        </footer>
    </div>
</body>

</html>

Но мой код всегда добавляет строки в конце файла, я запускал этот код один раз, и он работал отлично, но затем я добавляю несколько строк и когда я пытаюсь запуститьеще один раз не сработало.Я восстановил свой файл в тот момент, когда он работал, но он больше не работает.Что я делаю не так?

1 Ответ

0 голосов
/ 18 марта 2019

Всегда обрабатывайте HTML или XML с помощью соответствующего анализатора, а затем реализуйте свою обработку в DOM. Мое решение использует HTML :: TreeBuilder . Поскольку ваш вопрос не включает в себя содержание index.html, я добавил свой собственный к решению:

#!/usr/bin/perl
use warnings;
use strict;

use HTML::TreeBuilder;

# Extract links from <DATA>
my $root1 = HTML::TreeBuilder->new->parse_file(\*DATA)
    or die "HTML: $!\n";

my @links = $root1->look_down(_tag => 'a');

# Process salida.html from STDIN
my $root2 = HTML::TreeBuilder->new;
$root2->ignore_unknown(0);
$root2->parse_file(\*STDIN)
    or die "HTML: $!\n";

# insert links in correct section
if (my @nodes = $root2->look_down(class => 'contenido')) {
    $nodes[0]->push_content(@links);
}

print $root2->as_HTML(undef, '  '), "\n";

# IMPORTANT: must delete manually
$root2->delete;
$root1->delete;

exit 0;

__DATA__
<!DOCTYPE html>
<html>
  <head>
    <title>test</title>
  </head>
  <body>
    <div>
      <a href="link1.html">Link 1</a>
      <a href="link2.html">Link 2</a>
    </div>
  </body>
</html>

Тестовый прогон:

$ perl dummy.pl <dummy.html
<!DOCTYPE html>
<html lang="es-mx">
...
 <main class="contenido"> <a href="link1.html">Link 1</a><a href="link2.html">Link 2</a></main> 
...
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...