Exemplo n.º 1
0
 def validar(self, xml, nome_xsd=None):
     '''Função que valida um XML usando lxml do Python via arquivo XSD no diretório xsd/<pacote>/<nó_xml>.xsd'''
     # Realiza o parser sobre o xml, identificado como string se iniciar por '<', senão é identificado como nome de arquivo
     if type(xml) == str:
         if xml[0] == '<':
             xml = PoleXML.importar(xml)
         else:
             xml = PoleXML.importar(open(xml).read())
     # Para este sistema com lxml funcionar foi preciso trocar em tiposBasico_v1.03.xsd {0,} por *
     # Obeter a versão do primeiro ou segundo nó
     versao = xml('', 1)['versao'] or xml('', 1)('', 1)['versao']
     # O padrão de nome de arquivos xsd é iniciar com letras minúsculas,
     # mantendo maiúsuclas iniciais de palavras, assim foi preciso desse
     # trecho de código para passar para músculas iniciais maiúsculas
     if nome_xsd is None:
         nome = ''
         temp = xml('', 1)._XML__nome
         for i in range(len(temp)):
             if temp[i].isupper():
                 nome += temp[i].lower()
             else:
                 break
         nome += temp[i:]
     else:
         nome = nome_xsd
     # Caminho do arquivo XSD
     #print nome_xsd, self.__raiz , '/xsd/' , self.__pacote , '/' , nome , '_v' , versao , '.xsd'
     arquivo_xsd = os.path.join(self.__raiz, 'xsd', self.__pacote,
                                nome + '_v' + versao + '.xsd')
     # Verifica a validade do xml
     self.erros = PoleXML.validar(xml, arquivo_xsd)
     return len(self.erros) == 0
Exemplo n.º 2
0
 def validar(self, xml, nome_xsd = None):
     '''Função que valida um XML usando lxml do Python via arquivo XSD no diretório xsd/<pacote>/<nó_xml>.xsd'''
     # Realiza o parser sobre o xml, identificado como string se iniciar por '<', senão é identificado como nome de arquivo
     if type(xml) == str:
         if xml[0] == '<':
             xml = PoleXML.importar(xml)
         else:
             xml = PoleXML.importar(open(xml).read())
     # Para este sistema com lxml funcionar foi preciso trocar em tiposBasico_v1.03.xsd {0,} por *
     # Obeter a versão do primeiro ou segundo nó
     versao = xml('', 1)['versao'] or xml('', 1)('', 1)['versao']
     # O padrão de nome de arquivos xsd é iniciar com letras minúsculas,
     # mantendo maiúsuclas iniciais de palavras, assim foi preciso desse
     # trecho de código para passar para músculas iniciais maiúsculas
     if nome_xsd is None:
         nome = ''
         temp = xml('', 1)._XML__nome
         for i in range(len(temp)):
             if temp[i].isupper():
                 nome += temp[i].lower()
             else:
                 break
         nome += temp[i:]
     else:
         nome = nome_xsd
     # Caminho do arquivo XSD
     #print nome_xsd, self.__raiz , '/xsd/' , self.__pacote , '/' , nome , '_v' , versao , '.xsd'
     arquivo_xsd = os.path.join(self.__raiz, 'xsd', self.__pacote, nome + '_v' + versao + '.xsd')
     # Verifica a validade do xml
     self.erros = PoleXML.validar(xml, arquivo_xsd)
     return len(self.erros) == 0