Slamdunk / php-validatore-fattura-elettronica

Validatore di XML della Fattura Elettronica
MIT License
19 stars 7 forks source link

errore DOMDocument::loadXML(): Start tag expected, '<' not found in Entity #5

Open fferraro87 opened 5 years ago

fferraro87 commented 5 years ago

Ciao, ho utilizzato questo codice :

            $xml = simplexml_load_file($file_locale);
            $feValidator = new Validator();
            $feValidator->assertValidXml($xml->asXML());

e ricevo questo errore :

 Fatal error: Uncaught SlamFatturaElettronica\Exception\InvalidXsdStructureComplianceException: DOMDocument::schemaValidateSource(): Element '{http://www.w3.org/2001/XMLSchema}element', attribute 'ref': The QName value '{http://www.w3.org/2000/09/xmldsig#}Signature' does not resolve to a(n) element declaration. in C:\xampp2\htdocs\roberta\vendor\slam\php-validatore-fattura-elettronica\lib\Validator.php on line 36

Come posso risolverlo?

Grazie

Slamdunk commented 5 years ago

Ciao, scusa il ritardo della risposta: puoi mandarmi per email l'XML originale?

fferraro87 commented 5 years ago

Ciao, grazie per la risposta, si dimmi a quale indirizzo spedirlo

Slamdunk commented 5 years ago

La trovi in uno qualsiasi dei miei commit: https://github.com/Slamdunk/php-validatore-fattura-elettronica/commit/75fe8c22a2c7b11460b1f80af2038f1439b525d5.patch

Slamdunk commented 5 years ago

Con l'ultima release di qualche giorno fa v1.2-patch20190830.1 non viene generato alcun errore, puoi provare aggiornando la libreria?

fferraro87 commented 5 years ago

Ok provo con l'ultima versione perchè avevo provato tempo fa con la vecchia. Grazie

fferraro87 commented 5 years ago

mmm ora ho un altro tipo di errore :

Fatal error: Uncaught SlamFatturaElettronica\Exception\InvalidXsdStructureComplianceException: DOMDocument::schemaValidateSource(): Invalid Schema in C:\xampp3\htdocs\zimbra_admin\vendor\slam\php-validatore-fattura-elettronica\lib\Validator.php:36 Stack trace: #0 C:\xampp3\htdocs\zimbra_admin\validazione_fattura.php(22): SlamFatturaElettronica\Validator->assertValidXml('<?xml version="...') #1 {main} thrown in C:\xampp3\htdocs\zimbra_admin\vendor\slam\php-validatore-fattura-elettronica\lib\Validator.php on line 36

questo è il codice che sto utilizzando :

use SlamFatturaElettronica\Validator;
$fattura_scelta = filter_input(INPUT_GET, 'validazione', FILTER_SANITIZE_STRING);
$feValidator = new Validator();
$pathfile = "fatture/".$fattura_scelta;
$feValidator->assertValidXml(file_get_contents($pathfile));
Slamdunk commented 5 years ago

Vedo che stai usando Windows: questa libreria è testata solo su Linux, potresti provare su questo OS se ti da lo stesso errore?

fferraro87 commented 5 years ago

Si, sto sviluppando in locale su windows, adesso ho messo online e mi da questo errore :

Fatal error: Uncaught SlamFatturaElettronica\Exception\InvalidXsdStructureComplianceException: DOMDocument::schemaValidateSource(): Element '{http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2}FatturaElettronica': No matching global declaration available for the validation root. in /var/www/vhosts/servizi.levita.cloud/httpdocs/vendor/slam/php-validatore-fattura-elettronica/lib/Validator.php:36 Stack trace: #0 /var/www/vhosts/servizi.levita.cloud/httpdocs/validazione_fattura.php(22): SlamFatturaElettronica\Validator->assertValidXml('<?xml version="...', 'MessaggiTypes_v...') #1 {main} thrown in /var/www/vhosts/servizi.levita.cloud/httpdocs/vendor/slam/php-validatore-fattura-elettronica/lib/Validator.php on line 36
Slamdunk commented 5 years ago

Come detto, su Windows non posso aiutarti, mi spiace, per favore prova con Linux

fferraro87 commented 5 years ago

No no questo errore è su Linux (centos 7)

Slamdunk commented 5 years ago

Scusa hai ragione, comunque non mi torna l'errore: l'XML che mi hai spedito non ha nessun tag {http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2}FatturaElettronica.

Non so bene perché usi il filter_input, ma il seguente semplice script con l'esatto XML che mi hai spedito non ritorna alcun errore:

use SlamFatturaElettronica\Validator;

require __DIR__ . '/vendor/autoload.php';

$file = __DIR__ . '/IT03398160543_3S.XML';
$fileContent = file_get_contents($file);

$feValidator = new Validator();
$feValidator->assertValidXml($fileContent);

Provato con PHP 7.3 e questa libreria alla versione v1.2-patch20190830.1

fferraro87 commented 5 years ago

Da quello che vedo {http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2}FatturaElettronica è lo schema location che trovi nel tag FatturaElettronica, adesso provo con php 7.3, uso filter_input perchè prendo il nome del file dal post di un altro form

fferraro87 commented 5 years ago

anche togliendo il filter_input dà sempre lo stesso errore :

        require_once 'vendor/autoload.php';
        use SlamFatturaElettronica\Validator;
        $pathfile = "fatture/IT03398160543_3S.xml";
        $feValidator = new Validator();
        $fileContent = file_get_contents($pathfile);
        $feValidator->assertValidXml($fileContent);
Slamdunk commented 5 years ago

Non so che dirti, se non riesco a riprodurre l'errore non posso fare molto.

Puoi provare a creare una Pull-Request che genera l'errore in Travis?

fferraro87 commented 5 years ago

Ma può essere che non riesce a recuperare nulla da quel link http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2 ? faccio un po' di test e provo casomai apro una pullrequest