Á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

Retorno

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 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".
      • 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