• Publicidad

Eliminar nodo de XML

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

Eliminar nodo de XML

Notapor sarriaga » 2014-11-13 13:09 @589

Hola, ¿qué tal? De nuevo me dirijo a ustedes ya que he comenzado a trabajar con archivos XML y tengo un ligero problema... Verán, desde el navegador obtengo un archivo XML el cual valido, pero me arroja errores cuando trata de validar XML con addenda. Si el XML tiene estructura simple la valida sin problemas y se puede guardar en la base de datos. Mi teoría es que posiblemente el módulo que utilizo no valida XML con addenda...

¿Existe algún otro modo de validarlo con la estructura que menciono o podría eliminar la addenda del XML y después validarlo?

Tengo problemas para eliminar el nodo addenda y sus dependencias. Estoy utilizando XML::Simple, XML::LibXML y XML::Twig para manipular y acceder a la información del XML. He leído que podría eliminar.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use XML::Simple;
  2. require XML::LibXML;
  3. use XML::Twig;
  4. use Data::Dumper;
  5. use DBI;
  6. use strict;
  7.  
  8.  
  9. my $xml_info = XML::Simple->new->XMLin('../xmlData/tst.xml');
  10. $xml->validation(XML::LibXML->new->parse_file('../xmlData/tst.xml');
  11.  
  12. my $addenda = $xml_info->{'cfdi:Addenda'};      ## eliminar este nodo del xml original
  13. ## utilice lo siguiente; no lo hace como necesito
  14. #my $addenda = delete($xml_info->{'cfdi:Addenda'});
  15.  
  16. print Dumper $xml_info;
  17.  
  18.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Espero puedan orientarme.

Saludos
Última edición por explorer el 2014-11-13 20:35 @899, editado 1 vez en total
Razón: interrogantes; que => ¿qué; cuál => cual; sí => Si; modulo => módulo; ó => o; accesar => acceder; utilice => utilicé;
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Publicidad

Re: Eliminar nodo de XML

Notapor explorer » 2014-11-13 20:51 @910

Utilizar tres bibliotecas para una misma misión, es una locura.

De las tres que ofreces, me quedaría con XML::Twig. Leer el documento, interpretarlo, borrar lo que quieres con el método delete(), y luego pintar el resultado con print().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar nodo de XML

Notapor sarriaga » 2014-11-14 11:25 @517

Bien, ya estoy revisando... tengo una duda más... ¿¿Existe alguna librería que valide la Addenda?? Ya que un xml simple no lo contiene, y al utilizar la librería XML::LibXML me genera un error y dice que el xml no es válido, pero el problema es que sí lo es, ya que está certificado.

Utilizo la siguiente instrucción para validar el xml:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $XML_TEMP =  './temp.xml';
  2.  
  3. eval {$schema->validate(XML::LibXML->new->parse_file($XML_TEMP))};
  4. return 'El documento XML no es valido: '.$@ if $@;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y en el navegador genera el siguiente mensaje:
Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. El documento XML no es valido: ./temp.xml:0: Schemas validity error : Element '{http://boveda.misfacturas.net/schema}Comentario': No matching global element declaration available, but demanded by the strict wildcard.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


No sé si este error lo genera por que contiene addenda, ya que "sospechosamente" todos mis xml que la contienen generan ese error y los xml sin ella, los valida correctamente. Me siento perdida :?
Última edición por explorer el 2014-11-14 21:53 @953, editado 1 vez en total
Razón: valido => válido;
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: Eliminar nodo de XML

Notapor explorer » 2014-11-14 22:07 @963

¿Y no será que el scheme no corresponde al formato de ese nodo extra?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar nodo de XML

Notapor sarriaga » 2014-11-18 08:49 @409

En ésta parte del esquema le indico que puede existir... o tal vez me falte alguna configuración en este archivo :/

Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <xs:element name="Addenda" minOccurs="0">
  2.   <xs:annotation>
  3.      <xs:documentation>Nodo opcional para recibir las extensiones al presente formato que  sean de utilidad al contribuyente. Para las reglas de uso del mismo, referirse al formato de origen.</xs:documentation>
  4.   </xs:annotation>
  5.   <xs:complexType>
  6.      <xs:sequence>
  7.         <xs:any minOccurs="0" maxOccurs="unbounded"/>
  8.      </xs:sequence>
  9.   </xs:complexType>
  10. </xs:element>
  11.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Voy a seguir revisando, posiblemente algo me esté faltando.
Última edición por explorer el 2014-11-18 09:03 @419, editado 1 vez en total
Razón: algúna => alguna; éste => este;
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: Eliminar nodo de XML

Notapor explorer » 2014-11-18 09:08 @422

Element '{http://boveda.misfacturas.net/schema}Comentario': No matching global element declaration available, but demanded by the strict wildcard.

El error dice que el problema está en la marca Comentario: que el esquema dice que es obligatorio, pero no aparece en el XML.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Eliminar nodo de XML

Notapor sarriaga » 2014-11-20 09:02 @418

En el schema le importo el URL de la addenda para que se valide ahí pero no realiza la validación, ¿puede que esté importando de manera incorrecta?

schema_cfdi.xsd
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. <xs:schema xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.sat.gob.mx/cfd/3" elementFormDefault="qualified" attributeFormDefault="unqualified">
  2.  <xs:import xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" schemaLocation="TimbreFiscalDigital.xsd"/>
  3. <xs:import xmlns:xsi="https://boveda.misfacturas.net/schema" schemaLocation="AddendaMfn.xsd"/>
  4.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Con el schema anterior intento validar el siguiente xml original que contiene la addenda:
fact_test.xml
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
  1. - <cfdi:Addenda>
  2.   <mfn:Comentario xmlns:mfn="http://boveda.misfacturas.net/schema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://boveda.misfacturas.net/schema https://boveda.misfacturas.net/AddendaMfn.xsd">REQUISICION DE COMPRA Y/O SERVICIOS FOLIO 000011</mfn:Comentario>
  3.   </cfdi:Addenda>
  4.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿¿Puede ser que el AddendaMfn.xsd no contenga el elemento que menciona el error??
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: Eliminar nodo de XML

Notapor explorer » 2014-11-20 09:13 @425

https://boveda.misfacturas.net/AddendaMfn.xsd:

Estado HTTP 404 - /AddendaMfn.xsd

type Informe de estado

mensaje /AddendaMfn.xsd

descripción: El recurso requerido (/AddendaMfn.xsd) no está disponible.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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