Página 1 de 1

VALIDAR XML

Enviado: 17 Nov 2016 09:07
por gilberto.braoios
Boa tarde

Pessoal, estou tentando validar um XML de CTE com rotina do Mauricio e Quintas porém sem sucesso, abaixo a rotina com informações do erro. alguém pode me ajuda mais uma vez me apontando onde estou errando:

Código: Selecionar todos

---------------------------------------------------------------------

function validaxml()
LOCAL oDOMDoc, oSchema, ParseError
LOCAL cRETORNO:=HASH()
LOCAL cSchemaFilename:=''

cRETORNO['STATUS']:=.F.
cRETORNO['MSG']:=''
TRY
   oDOMDoc := win_OleCreateObject( "MSXML2.DomDocument.5.0" )
   //oDOMDoc := win_oleCreateObject( _MSXML2_DOMDocument )
CATCH
   cRETORNO['MSG']:='Não foi possível carregar o MSXML para validação do XML'
   RETURN(cRETORNO)
END
TRY
   oDOMDoc:async = .F.
   oDOMDoc:resolveExternals := .F.
   oDOMDoc:validateOnParse  = .T.
   oDOMDoc:LoadXML(cXML)
CATCH
   cRETORNO['MSG']:='Não foi possível carregar o arquivo XML para a validação.'
   RETURN(cRETORNO)
END
IF oDOMDoc:parseError:errorCode <> 0 // XML não carregado
  cRETORNO['MSG']:='Não foi possível carregar o documento pois ele não corresponde ao seu Schema'+HB_OsNewLine()
  RETURN(cRETORNO)
ENDIF
TRY
   oSchema := win_OleCreateObject( "MSXML2.XMLSchemaCache.5.0" )
   //oSchema := win_oleCreateObject( _MSXML2_XMLSchemaCache )
CATCH
   cRETORNO['MSG']:='Não foi possível carregar o MSXML para o schema do XML.'
   RETURN(cRETORNO)
END
 cSchemaFilename := 'c:\schemas\enviCte_v2.00.xsd'
****************************************
//pegou o esquema na pasta
//  c:\schemas\cte_v2.00.xsd
****************************************
IF ! FILE(cSchemaFilename)
  cRETORNO['MSG']:='Arquivo do schema não encontrado '+cSchemaFilename
  RETURN(cRETORNO)
ENDIF
TRY
  oSchema:add( 'http://www.portalfiscal.inf.br/cte', cSchemaFilename )
CATCH oError
  cRETORNO['MSG']:='Falha '+HB_OsNewLine()
  RETURN(cRETORNO)
END
oDOMDoc:Schemas := oSchema
ParseError := oDOMDoc:validate
msginfo(ParseError:errorCode)
msginfo(ParseError:reason)

IF ParseError:errorCode <> 0
   cRetorno['nResult']  := ParseError:errorCode
   cRETORNO['MSG']  := ParseError:reason
   ****************************************
    //retorna o erro abaixo
    //-1072898035C 
   // The element '{http://www.portalfiscal.inf.br/cte}cteProc' is used but not declared in the DTD/Schema.
   ****************************************
   RETURN(cRetorno)
ENDIF
oDOMDoc := nil
ParseError := nil
oSchema := nil
cRETORNO['STATUS']:=.T.

RETURN(cRETORNO)

--------------------------------------------------------------------------------------------
Desde já obrigado



Gilberto

VALIDAR XML

Enviado: 20 Nov 2016 02:04
por JoséQuintas
Não vi a mensagem antes.

Nessas horas, talvez retirar todos os bloqueios de "esconder" erros pode ser que ajude.

Em todo caso, dê uma comparada com a rotina de validação atual.

Simplificando:

- A rotina carrega o XML
- Depois carrega o schemma
- E depois valida

Se algum componente não está instalado no Windows, gera erro
Se o xml tem problemas, gera erro ao ser carregado
Se o schemma tem problemas, gera erro ao ser carregado

Infelizmente, o(s) componente(s) da Microsoft fazem isso, por isso o TRY/CATH ou BEGIN SEQUENCE/END SEQUENCE
Retirar esses "evitamentos" de erro podem ajudar a detectar se alguma mensagem de erro útil acabou ficando escondida.

VALIDAR XML

Enviado: 08 Dez 2016 17:10
por depaula.jau
Quintas, Boa tarde!!!

Estou com problemas para usar as rotinas de assinatura, com Certificado A1 Instalado em Windows7 64... Ele não assina.

Salvei as dlls , registrei e mesmo assim não leu.

A algo que eu possa checar que vc se lembro ?

VALIDAR XML

Enviado: 08 Dez 2016 19:52
por JoséQuintas
O que roda em 32 bits fica em \Windows\syswow64
Dentro dela tem o regsvr32.exe pra 32 bits.

Se as rotinas de evitar erro estão atrapalhando, de repente é desbloqueá-las e deixar que aconteça o erro.
Pode facilitar identificar o problema.