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 A função XMLParser() está sujeita ao tamanho máximo de uma variável caractere no
Advpl 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
ra'zões 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".