Pregunta

Estoy tratando de utilizar XPath para extraer algunas etiquetas HTML y datos y para la que necesito utilizar el módulo XML::LibXML.

He intentado instalar desde shell de CPAN, pero no se instala.

He seguido las instrucciones desde el CPAN sitio acerca de la instalación, que necesitamos para instalar libxml2, iconv y zlib envoltorios antes de instalar XML::LibXML y no funcionó.

Además, si hay algún otro módulo simple que recibe mi tarea hecha, por favor hágamelo saber.

La tarea en cuestión:

Estoy buscando una etiqueta específica <dd> en una página HTML que es muy grande (alrededor del año 5000 - 10000) y las etiquetas <dd> <dt>. Por lo tanto, estoy escribiendo un guión que coincide con el contenido dentro de la etiqueta <dd> y recupera el contenido dentro de la (siguiente) <dt> etiqueta correspondiente.

Me gustaría que pude haber sido un poco más clara. Cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

Si está utilizando ActiveState Perl, se debe añadir los repositorios listados en ActivePerl 10xx paquetes PPM Win32 a ppm y luego usar

ppm install XML::LibXML

Tratando de analizar HTML como XML no es generalmente una tarea agradable. Creo HTML :: TokeParser es más adecuado para la tarea.

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TokeParser;

my $p = HTML::TokeParser->new(\*DATA);

my @definitions;

while ( my $dl_tag = $p->get_tag('dl') ) {
    while ( my $dt_tag = $p->get_tag('dt') ) {
        my $term = $p->get_trimmed_text('/dt');
        my $dd_tag = $p->get_tag('dd');
        my $defn = $p->get_trimmed_text('/dd');
        push @definitions, [$term, $defn];
    }
}

use Data::Dumper;
print Dumper \@definitions;

__DATA__
<dl>
<dt>One</dt>
<dd>1</dd>
<dt>Two</dt>
<dd>2</dd>
</dl>

Salida:

$VAR1 = [
          [
            'One',
            '1'
          ],
          [
            'Two',
            '2'
          ]
        ];

Otros consejos

Si lo que desea consultas XPath entonces que acabo de escribir un guión ayer que utiliza XML :: :: XPath XMLParser hacer consultas XPath en un archivo XML.

He probado tanto con la instalación de Perl Activestate y con el Perl fresa en ventanas.

No recuerdo tener que ir a CPAN para instalar los módulos (aunque es posible que tenga más temprano y se olvidó de hacerlo :)), por lo que quizás se puede utilizar el módulo XML :: XPath en su lugar?

Aquí está la muestra a partir de la documentación

use XML::XPath;
use XML::XPath::XMLParser;

my $xp = XML::XPath->new(filename => 'test.xhtml');

my $nodeset = $xp->find('/html/body/p'); # find all paragraphs

foreach my $node ($nodeset->get_nodelist) {
    print "FOUND\n\n", 
        XML::XPath::XMLParser::as_string($node),
        "\n\n";
}

Si se asume que está utilizando ActiveState Perl, usted puede obtener XML :: LibXML funcionando muy bien. Puede obtener XML :: LibXML de Randy Kobes' sitio y conseguir que libxslt / libxml , etc de zlatkovic.com

Me acaba de instalar libxml primero y luego usar ppm para instalar XML :: LibXML. Funciona muy bien.

Si está utilizando Strawberry Perl , CPAN debe trabajar para usted como libxml2, etc, son parte de la fresa distribución de Perl creo.

También vea mi post en el hilo ¿Cómo instalo XML :: LibXML para ActivePerl? .

se describen algunos problemas / soluciones que encontré la instalación de XML-LibXML usando PPM.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top