• Publicidad

Obtención de errores de XML::LibXML

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Obtención de errores de XML::LibXML

Notapor panterozo » 2010-04-22 09:45 @447

Tengo un problemón. Como dice el título, necesito capturar los mensajes que envía el paquete XML::LibXML. Por ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
 Element '{urn:ietf:params:xml:ns:contact-1.0}id': This element is not expected. Expected is ( {urn:ietf:params:xml:ns:contact-1.0}authInfo ).
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


o bien

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
 Element '{urn:ietf:params:xml:ns:contact-1.0}clID': This element is not expected. Expected is one of ( {urn:ietf:params:xml:ns:contact-1.0}voice, {urn:ietf:params:xml:ns:contact-1.0}fax, {urn:ietf:params:xml:ns:contact-1.0}email
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Esto es cuando se valida un XML entrante. No tengo idea desde dónde este módulo obtiene los mensajes de error.

Cualquier idea de dónde poder obtener las frases, por ejemplo "This element is not expected. Expected is" o "This element is not expected. Expected is one of" lo agradecería muchísimo :D
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Publicidad

Re: Obtención de errores de XML::LibXML

Notapor explorer » 2010-04-22 16:00 @708

Lo tienes descrito en la documentación del módulo XML::LibXML::Parser, en la sección ERROR REPORTING: los errores se pueden capturar dentro de sentencias eval(), y almacenadas en $@.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Obtención de errores de XML::LibXML

Notapor panterozo » 2010-04-23 07:58 @373

La obtención de errores las hago dentro de un eval(), y las capturo con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if(ref($@)){...}elsif($@){...}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Mi pregunta es desde dónde XML::LibXML obtiene estos mensajes de error. Estoy parseando algunos XML, y dentro de un log tengo los mensajes de error que me ha enviado. Te pongo un ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
sub Common::getHash{
        my %hash = (
                1 => "This element is not expected",
                2 => "This element is not expected. Expected is",
                3 => "This element is not expected. Expected is one of",
                4 => "is not a valid value of the atomic type",
                5 => "Missing child element(s). Expected is"
                );
        return \%hash;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


por el momento, tengo un hash con las FRASES de errores, para realizar la captura de ellos. Ahora el problema es que estos son por el momento los únicos mensajes de error que me ha enviado, pero deseaba saber si es posible tener una lista de todos los errores que puede dar XML::LibXML. Si es así, ¿de dónde obtiene estos mensajes? Estuve leyendo en distintos foros, y al parecer son mensajes que obtiene desde la librería libxml.

¿Alguna idea desde dónde sacar estos mensajes? ya que el día que envíe un mensaje que no tengo guardado, lógicamente se generará una falla en el programa.

Aquí unos mensajes completos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Element '{urn:ietf:params:xml:ns:domain-1.0}infData': This element is not expected. Expected is ( {urn:ietf:params:xml:ns:epp-1.0}registry )

Element '{urn:ietf:params:xml:ns:epp-1.0}extension': This element is not expected.

Element '{urn:ietf:params:xml:ns:latintlddomain-1.0}chkData': Missing child element(s). Expected is ( {urn:ietf:params:xml:ns:latintlddomain-1.0}cd ).

Element '{urn:ietf:params:xml:ns:latintlddomain-1.0}name': '' is not a valid value of the atomic type '{urn:ietf:params:xml:ns:eppcom-1.0}labelType'.

Element '{urn:ietf:params:xml:ns:epp-1.0}epp': This element is not expected. Expected is one of ( {urn:ietf:params:xml:ns:epp-1.0}result, {urn:ietf:params:xml:ns:epp-1.0}msgQ, {urn:ietf:params:xml:ns:epp-1.0}resData, {urn:ietf:params:xml:ns:epp-1.0}extension, {urn:ietf:params:xml:ns:epp-1.0}trID ).
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Estos mensajes de error los indica al momento de crear un XML que no siga los esquemas definidos.

Espero se comprenda lo que deseo obtener.
Muchas gracias
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Obtención de errores de XML::LibXML

Notapor explorer » 2010-04-23 10:22 @474

La cuestión no es sencilla...

Los mensajes de texto de error de libxml2 están justamente dentro de libxml2.so, así que hay que mirar el código fuente de la librería.

Buscando un poco, sale que, parte de los mensajes de error están en el fichero parser.c(276), en la función xmlFatalErr(), parte en el fichero xmlschemas.c, y en el fichero include/libxml/xmlerror.h están las definiciones de las constantes numéricas de los errores.

Por ejemplo, el mensaje de error "This element is not expected. Expected is (", se compone de dos frases que están en las líneas 26531 y 2534 de xmlschemas.c (versión 2.7.2 de la librería).

Así que no, no hay sitio único y claro en donde están recogidos los mensajes de error.

Una opción más sencilla, sería XML::LibXML::ErrNo y XML::LibXML::Error. El primero tiene las mismas funciones que xmlerror.h: definir constantes de error para todos los errores; y en el segundo, se accede al sistema de información de errores de la librería, por diversos métodos. Si miras su sinopsis verás que tiene lo que estás buscando.

Así, una solución rápida sería: dentro del if(ref $@) {...}, mirar el valor de $@->code();, y según el número de código de error que nos devuelve, ya sabemos qué error ha ocurrido, y ya sabes qué es lo que tienes que hacer o el mensaje que quieres mostrar.

Eso sí... hay más de 480 mensajes de error (están todos en XML::LibXML::ErrNo)...

Tómatelo con calma...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Obtención de errores de XML::LibXML

Notapor panterozo » 2010-04-23 11:37 @525

Gracias por las indicaciones. Voy a entrar a ver todas estas cosas y te cuento. Y sí, mucha paciencia :P
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 28 invitados

cron