Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/3279126062824/newLayout.csstecnologia.css
Aviso

Documentação de função não suportada ou descontinuado.

Dica
titleSugestão

Recomenda-se a utilização da classe tXmlManager em substituição a função XMLParser.

Motivadores:

  • Ao realizar o parser do XML usando a classe em questão, ela não gera classes dinâmicas, melhorando a execução do programa.
  • Tem performance elevada na execução do parser.
Portuguese

Pagetitle
XmlParserFile
XmlParserFile

Colapse ALL

Pagetitle

Expand ALL

XmlParserFile

Função:

XmlParserFile

Descrição

Esta

função

permite

retornar

um

objeto,

que

possui

uma

estrutura

XML,

recebido

de

um

arquivo

por

parâmetro.

Sintaxe

Bloco de código
collapsefalse
XmlParserFile( <
cFile>
 cFile >, <
cReplace>
 cReplace >, <
@cError>
 cError >, <
@cWarning> ) --> oXML
 cWarning > )

Parâmetros

/Elementos

Nome

Tipo

Descrição

Obrigatório

Referência

cFile

Caracter

caractere

Representa o

diretório

dir etório (a partir do rootpath) e o nome de um arquivo *.xml.

X


cReplace

Caracter

caractere

Representa o valor que será substituído, pelos caracteres de espaço em branco, na especificação do nó XML.

X


cError

Caracter

caractere

Caso ocorra algum erro na execução da função, a variável será preenchida com sua descrição.

X

X

 X

cWarning

Caracter

caractere

Caso ocorra algum alerta (warning) durante a execução da função, a variável será preenchida com sua descrição.

X

X

Retorno

Nome

Tipo

Descrição

oXML

(

objeto

)

Retorna um

Um objeto com a estrutura de acordo com o XML.

Observações

 

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
    • contendo o path e nome do arquivo xml a ser processado, localizado no disco a partir do rootpath 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 ra'zõ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 MG 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".
    • Após você utilizar os objetos dinâmicos gerados pelo parser, a definição deles continua na memória, a menos que você limpe a definição usando a função DelClassIntf().
  • A estrutura retornada:

    Bloco de código
    languagecpp
    themeEclipse
    linenumberstrue
    collapsefalse
     <ObjXML>
      <NodeXML>
        -<ArrayNodes>
        -REALNAME
        -TEXT
        -TYPE
    

Exemplo

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
  #INCLUDE "TOTVS.CH"
  #INCLUDE "XMLXFUN.CH"

  User Function getObjXML()
  Local cError   := ""
  Local cWarning := ""
  Local cXmlFile := ""
  Local oXml := NIL

  // Arquivo XML
  cXmlFile := "xmlcontent.xml"

  //Gera o Objeto XML
  oXml := XmlParserFile( cXmlFile, "_", @cError, @cWarning )
  If (oXml == NIL )
    MsgStop("Falha ao gerar Objeto XML : "+cError+" / "+cWarning)
    Return
  Endif

  // Mostrando a informação do Node
  MsgInfo(oXml:_PEDIDO:_NOMECLIENTE:Text,"Cliente")

  Return oXml

  // Exemplo de conteúdo do arquivo xmlcontent.xml
  /*
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <pedido>
   <Nome_Cliente>Microsiga Software</Nome_Cliente>
    <Endereco>Av. Braz Leme</Endereco>
     <Numero>1361</Numero>
  	  <Data>22-03-2005</Data>
      <Itens>
  	   <Item>
  		<Produto>Protheus</Produto>
         <Quantidade>1</Quantidade>
         <Preco>100.00</Preco>
       </Item>
      </Itens>
  </pedido>
  */


Veja também

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