• Publicidad

Problema con elementos vacíos en XML::LibXML

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Problema con elementos vacíos en XML::LibXML

Notapor sisifo80 » 2015-10-01 03:35 @191

Hola,

Estoy usando el módulo XML::LibXML para editar un xml. Quiero capturar el texto de algunos elementos en diferentes variables, pero tengo problemas cuando se trata de un elemento vacío. Por ejemplo, imaginando el siguiente XML:

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <root>
  2.   <elemento1>texto</elemento1>
  3.   <elemento2/>
  4. </root>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Tengo el siguiente código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $node ( $doc->findnodes('//elemento1') ) {
  2.  
  3.    $elemento1 = $node->firstChild->data;
  4. };
  5.  
  6. foreach $node ( $doc->findnodes('//elemento2') ) {
  7.  
  8.    $elemento2 = $node->firstChild->data;
  9. };
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Pero al llegar al elemento vacío el script se detiene mostrando el siguiente error:
Can't call method "data" on undefined value

He probado lo siguiente, pero sin éxito:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. foreach $node ( $doc->findnodes('//elemento2"]') ) {
  2.  
  3.    if ( $node->firstChild->isEmptyElement() ) { $elemento2 = ''; }
  4.    else {  $elemento2 = $node->firstChild->data; }
  5. };
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Supongo que el problema es que no existe un firstChild para ese elemento porque es un elemento vacío, pero ¿cómo puedo entonces solventar estos casos...?
sisifo80
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-20 07:30 @354

Publicidad

Re: Problema con elementos vacíos en XML::LibXML

Notapor explorer » 2015-10-01 07:37 @359

¿Has probado con
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($node->hasChildNodes()) {
  2.     # el nodo tiene nodos hijo
  3. }
  4. else {
  5.     # el nodo no tiene más hijos
  6. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

?

Otra opción es llamar a childNodes():
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. @childnodes = $node->childNodes();
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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: Problema con elementos vacíos en XML::LibXML

Notapor sisifo80 » 2015-10-01 09:37 @442

Pues sí, ¡funciona! Muchas gracias.
sisifo80
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-20 07:30 @354


Volver a Módulos

¿Quién está conectado?

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