Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/3279126062824/newLayout.csstecnologia.css |
Aviso |
---|
Documentação de função não suportada ou descontinuado. |
Dica | ||
---|---|---|
| ||
Recomenda-se a utilização da classe tXmlManager em substituição a função XMLParser.
|
Portuguese | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
DescriçãoEsta função permite retornar um objeto, que possui uma estrutura XML, recebido de um arquivo por parâmetro. Sintaxe
Parâmetros/Elementos
|
cReplace |
caractere | Representa o valor que será substituído, pelos caracteres de espaço em branco, na especificação do nó XML. | X |
cError |
caractere | Caso ocorra algum erro na execução da função, a variável será preenchida com sua descrição. | X |
X |
cWarning |
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 |
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.
- 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 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 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 language cpp theme Eclipse linenumbers true collapse false <ObjXML> <NodeXML> -<ArrayNodes> -REALNAME -TEXT -TYPE
Exemplo
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#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 arquivodo 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