Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 3 Próxima »

Função: XmlParserFile

Esta função permite retornar um objeto, que possui uma estrutura XML, recebido de um arquivo por parâmetro.

XmlParserFile ( < cFile>, < cReplace>, < @cError>, < @cWarning> ) --> oXML

 

NomeTipoDescriçãoObrigatórioReferência
cFileCaracterRepresenta o diretório (a partir do rootpath) e o nome de um arquivo *.xml.X 
cReplaceCaracterRepresenta o valor que será substituído, pelos caracteres de espaço em branco, na especificação do nó XML.X 
cErrorCaracterCaso ocorra algum erro na execução da função, a variável será preenchida com sua descrição.XX
cWarningCaracterCaso ocorra algum alerta (warning) durante a execução da função, a variável será preenchida com sua descrição.XX

 

oXML
    (objeto)
  • Retorna um objeto com a estrutura de acordo com o XML.

 

Formato da estrutura de retorno

<ObjXML>
           <NodeXML>
                   -<ArrayNodes>
                   -REALNAME
                   -TEXT
                   -TYPE

Sendo:

  • REALNAME, TEXT e TYPE propriedades que todos os nós (nodes) possuem.
  • ArrayNodes - propriedade que existirá quando o nó possuir mais de um filho do mesmo tipo.

  

No código-fonte (exemplo) abaixo, observe os seguintes detalhes:

  • A User Function "getObjXML()" realizará a leitura do arquivo xml grqavado no disco.
  • Na variável "cFile", foi informada a string contendo o path e nome do arquivo xml a ser processado, localizado no disco a partir do rootpath  do sistema Protheus.
  • A função "XmlParserFile" realizará a leitura do arquivo, analisará se a sintaxe e ordem das tags estão formadas, e gerar um objeto Advpl com a árvore correspondente a estrutura do XML.
  • Caso as tags não sejam formadas, corretamente, a variável (cError e cWarning) retornarão um alerta (warning) ou erro, conforme os parâmetros (@cError e @cWarning) informados por referência.
  • A variável "oXml" retornará o conteúdo do objeto na estrutura de árvore; ou seja, na mesma estrutura XML, onde cada nível da árvore é uma propriedade subsequente do objeto.


IMPORTANTE : LIMITE DE TAMANHO DO XML



A função XMLParser() está sujeita ao tamanho máximo de uma variável caractere no AdvPL ( 1 MB ). Já a função XMLPArserFile() não têm limite explícito de tamanho de arquivo XML a ser processado; PORÉM não é recomendável processar arquivos com mais de 5 MB de tamanho, devido às seguintes razões: 
  • Parsear um XML exige a leitura do mesmo na íntegra, e geração de propriedades para cada tag parseada; esta operação têm um custo alto de CPU, e quando maior o arquivo, maior o tempo de processamento. 
  • Em média, um XML parseado na memória ocupa 9 vezes o seu tamanho original. Logo, um XML de 5 MB ocupa no mínimo 45 MB na memória appós parseado. 
  • Existe um limite Na linguagem Advpl para processamento de XML, não relacionado diretamente a tamanho, mas a quantidade de nodes dentro de um XML. Caso o numero de nodes / tags dentro do XML ultrapasseaproximadamente 250 mil nodes, o parser gera uma ocorrência de erro fatal Advpl   "XML Dynamic Nodes OVERFLOW".
/*Neste exemplo vamos usar a função que tem o mesmo objetivo da XmlParser, a diferença é que esta lê um arquivo
do disco com a extensão .xml. Quando passamos a string informando o path do arquivo em disco, devemos lembrar que
a procura do arquivo será feita através do rootpath do Protheus. Logo após a leitura do arquivo a função irá montar
o objeto analisando se a sintaxe e a ordem das tags está bem formada, caso isso não ocorra a função irá retonar
um warning ou até um possível erro, nos parametros informados por referência.Caso isso nao ocorra a função irá
retornar o objeto contendo uma estrutura em forma de arvore, no caso a mesma estrutura do xml.*/

#INCLUDE "TOTVS.CH"
#INCLUDE "XMLXFUN.CH"
User Function getObjXML()
Local cError := ""
Local cWarning := ""
Local oXml := NIl
Local cFile := ""

//a partir do rootpath do ambiente
cFile := "\xml\pedido.xml"

//Gera o Objeto XML
oXml := XmlParserFile( cFile, "_", @cError, @cWarning )

//acessando o CONTEUDO do meu nodo ""
oXml:_PEDIDO:_NOME_CLIENTE:Text := "TOTVS"
Return oXml
Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10

 

  • Sem rótulos