Você está na página 1de 13

FUNES TRATAMENTO XML

Sintaxe
XmlChildCount ( < oParent > ) --> nChild
Parmetros
Argumento
oParent

Tipo

Descrio
Indica o node XML no qual ele ir fazer a contagem dos
Objeto
filhos.

Retorno
Tipo
Numrico

Descrio
Retorna o numero de elementos encontrados.

Descrio
A funo tem o objetivo de retornar a quantidade de ns existentes, a partir de um nodo
pai informado como argumento.
A funo no faz essa contagem recursivamente pela estrutura, ou seja, ela nao varre a
estrutura entrando em todos subNodos a partir do elemento passado como raiz para a
contagem e sim apenas os filhos de primeiro nvel.
Essa funo util para manipularmos os objetos XML diretamente, sem
necessariamente conhecermos o contedo do objeto.
Sintaxe
XmlChildEx ( < OParent > , < cProcura > ) --> retorno
Parmetros
Argumento
OParent
cProcura

Tipo

Descrio
Nodo usado para indicar o inicio da procura do elemento
Objeto
requerido.
Caracter Representa o nome do elemento que desejamos encontrar.

Retorno
Tipo
(Qualquer)

Descrio
Quando a funao encontrar apenas um elemento ser retornado o objeto
node, caso possua mais de um elemento do mesmo nome ir retornar um
array dos nodes, caso contrrio retorna NIL.

Descrio
A funo tem o objetivo de retornar um ou mais filhos da estrutura, de acordo com o
nome do elemento procurado.
Especificando um elemento qualquer do objeto para a funo, na qual ser usado como
base para busca apenas em seu primeiro sub-nvel a funo ir retornar todos os
nodos filhos que encontar.
til quando quando queremos buscar por um elemento filho e exista mais de um
elemento do mesmo tipo.

Sintaxe
XmlCloneNode ( < oParent > , < cNewName > ) --> Nil
Parmetros
Argumento
oParent
cNewName

Tipo
Descrio
Objeto Representa o objeto node XML no qual ser colando
Caracter Indica o nome no qual ser atribuido o node clonado

Retorno
Tipo
(NULO)

Descrio
Nil

Descrio
A funo tem o objetivo de criar um clone, do n informado pelo parametro,
especificando um novo nome para o elemento, de forma que a funo clona apenas o
node, as propriedades no.
Quando o nodo clonado esta com o mesmo nome de um existente, ento criado um
array automaticamente com os nodos.
Ela pode ser utilizada para acrescentarmos dados em um modelo de xml j existente.

Sintaxe
XmlDelNode ( < oParent > , < cNode > ) --> Nil
Parmetros

Argumento
oParent
cNode

Tipo
Descrio
Objeto Representa o Node pai do elemento que ser removido.
Representa o Real name do elemento node que ser
Caracter
removido.

Retorno
Tipo
(NULO)

Descrio
Nil

Descrio
A funo tem o objetivo de deletar um nodo de um objeto xml.
Para isto informamos passando por parametro um elemento do objeto que contm a
estrutura do xml(um nodo qualquer), este nao precisa ser obrigatriamente o root da
estrutura.
Em seguida informamos o nome do nodo que desejamos deletar, pois a funo ir
procurar recursivamente a partir do nodo informado, o elemento que possu o nome do
nodo a ser deletado dentro da estrutura.
A xmlDelNode ir deletar todos nodos que contenham o nome igual ao do nodo
informado para ser deletado a partir do nodo informado para pesquisa.
A funo retorna true caso consiga encontrar um elemento e deleta-lo, false caso
contrrio.
Exemplos
Neste exemplo, criamos uma string contendo o xml, em seguida parseamos ele, e agora
vamos deletar um nodo do objeto retornado pela xmlParser, note que no exemplo passei
o nodo '<itens>' como raiz da estrutura a ser pesquisada e queremos deletar o nodo
'<item>', que elemento de '<itens>'.
A funo xmlDelNode tem como objetivo deletar todos os elementos '<item>' que
encontrar dentro da estrutura passada para inicio da pesquisa.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "XMLXFUN.CH"
User Function getObjXML()
Local cError
:= ""
Local cWarning := ""
Local oXml := NIL
//Gera o Objeto XML
oXml := XmlParser( GeraXML(), "_", @cError, @cWarning )

if !XmlDelNode( oScript:_PEDIDO:_ITENS, "_ITEM" )


conout("Nao foi possivel excluir")
EndIf
// Tranforma o Objeto XML em arquivo ou string
// Grava o arquivo em um diretrio \xml a partir do rootPath
SAVE oXml XMLFILE "\xml\teste.xml"
Return oXml
// funo para gerar uma string contendo um xml
Static Function GeraXML()
Local cScript := '<?xml version="1.0" encoding="UTF-8"?>'
cScript += "<pedido>"
cScript += " <Nome Cliente>Microsiga Software S/A</Nome
Cliente>"
cScript += " <Endereco>Av. Braz Leme</Endereco>"
cScript += " <Numero>1361</Numero>"
cScript += " <Data>22-03-2005</Data>"
cScript += " <Itens>"
cScript += "
<Item>"
cScript += "
<Produto>Prothues</Produto>"
cScript += "
<Quantidade>1</Quantidade>"
cScript += "
<Preco>100.00</Preco>"
cScript += "
</Item>"
cScript += "
<Item>"
cScript += "
<Produto>ERP<Produto>"
cScript += "
<Quantidade>0</Quantidade>"
cScript += "
<Preco>0</Preco>"
cScript += "
</Item>"
cScript += " </Itens>"
cScript += "</pedido>"
Return cScript

Sintaxe
XmlGetChild ( ) --> Nil
Retorno
Tipo
(NULO)

Descrio
Nil

Descrio
A funo tem o objetivo de retornar um elemento filho da estrutura.
Especificando um elemento qualquer do objeto para a funo, na qual ir usar como
base para retornar o nodo filho de nmero indicado pelo segundo parametro passado
para a funo.

til quando queremos mudar o posicionamento do objeto, para algum nodo filho
do atual na estrutura do objeto XML.
No Exemplo seguinte usamos a funo para nos posicionar no nodo <itens>, em seguida
apagamos todos os nodos filhos com a xmlDelNode.
Usando o comando SAVE criamos um arquivo teste.xml ao final da execuo do
programa.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "XMLXFUN.CH"
User Function ExeXML()
Local cError
:= ""
Local cWarning := ""
Local oScript
Local cFile := ""
//a partir do rootpath do ambiente
cFile := "\xml\pedido.xml"
//Gera o Objeto XML ref. ao script
oScript := XmlParser( GeraXML(), "_", @cError, @cWarning )
oScript := XmlGetchild( oScript:_PEDIDO , XmlChildCount(
oScript:_PEDIDO ))
// Agora vou apagar um node
if !XmlDelNode( oScript , "_ITEM" )
conout("Nao foi possivel apagar o nodo")
EndIf
// Tranforma o Objeto XML em arquivo
SAVE oScript XMLFILE "\xml\teste.xml"
Return oScript
Static Function GeraXML()
// Script XML a gerar objeto
Local cScript := '<?xml version="1.0" encoding="UTF-8"?>'
cScript += "<pedido>"
cScript += " <Nome Cliente>Microsiga Software S/A</Nome
Cliente>"
cScript += " <Endereco>Av. Braz Leme</Endereco>"
cScript += " <Numero>1361</Numero>"
cScript += " <Data>22-03-2005</Data>"
cScript += " <Itens>"
cScript += "
<Item>"
cScript += "
<Produto>Prothues</Produto>"
cScript += "
<Quantidade>1</Quantidade>"
cScript += "
<Preco>100.00</Preco>"
cScript += "
</Item>"
cScript += "
<Item>"
cScript += "
<Produto>ERP<Produto>"
cScript += "
<Quantidade>0</Quantidade>"

cScript
cScript
cScript
cScript

+=
+=
+=
+=

"
<Preco>0</Preco>"
"
</Item>"
" </Itens>"
"</pedido>"

Return cScript

Sintaxe
XmlGetParent ( < oNode > ) --> oParent
Parmetros
Argumento

Tipo

Descrio
representa o node no qual ser usado como referncia para
Objeto
o retorno do node pai.

oNode
Retorno
Tipo
Objeto

Descrio
Um objeto posicionado no node de acordo com o argumento passado.

Descrio
A funo tem o objetivo de retornar um nodo que representa o nodo 'pai'
do elemento especificado por parametro.
til quando queremos 'subir' na estrutura do objeto XML
Sintaxe
XmlNewNode ( < oParent > , < cElementName > , < cRealName > , < cType > ) --> Nil
Parmetros
Argumento
oParent
cElementName
cRealName
cType

Tipo
Descrio
Objeto Indica o local onde ser inserido o novo node XML.
Caracter o nome do elemento Node no XML
Caracter o nome Real do Node XML
Caracter Representa o tipo de node XML que ser criado

Retorno
Tipo
Objeto
Descrio

Descrio
Nil

A funo tem o objetivo de criar um novo nodo a partir de um ponto qualquer no xml.
Para isto necessrio informar em qual ponto do objeto xml(o xml parseado) que
desejamos adicionar um novo elemento.
O novo nodo ser adicionado como filho do nodo passado por parametro, onde sero
informados tambm os dados em relao a ele:
-REALNAME
-ELEMENTNAME
-TYPE
(para entender melhor o funcionamento da funo veja o exemplo)
Exemplos
Neste exemplo criamos o xml atravs da funo GeraXML, parseamos ele atravs da
xmlParser retornando o objeto xml.
Em seguida visualizamos o objeto retornado e usamos a funao xmlChildCount
retornando a quantidade de elementos no objeto contendo o xml. No Nosso exemplo a
funo ir retornar 5 elementos.
Agora usaremos a xmlNewNode, especificando que o novo nodo ser adicionado como
filho de '<pedido>', logo depois acessamos o nodo e acrecentamos um texto para ele.
obs: o resultado disso no xml ser <exemplo1>Exemplo Microsiga</exemplo1>
Aps a criao do nodo, a xmlChildCount ir retornar 6 indicando que o nodo foi
inserido.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "XMLXFUN.CH"
User Function getObjXML()
Local cError
:= ""
Local cWarning := ""
Local cXML := ""
Local oXml := NIL
//Gera o Objeto XML
oXml := XmlParser( GeraXML(), "_", @cError, @cWarning )
//verifica quantos elementos possuo
conout( XmlChildCount( oScript:_PEDIDO ) )
// Criando um node
XmlNewNode(oScript:_PEDIDO, "Exemplo1", "Exemplo1", "NOD" )
//setando o CONTEUDO do meu nodo ""
oXml:_PEDIDO:Exemplo1:Text := "Exemplo Microsiga"
//verifica quantos elementos possuo depois da insero
conout( XmlChildCount( oScript:_PEDIDO ) )

// Tranforma o Objeto XML em string


SAVE oXml XMLSTRING cXML
Return oXml
// funo para gerar uma string contendo um xml
Static Function GeraXML()
Local cScript := '<?xml version="1.0" encoding="UTF-8"?>'
cScript += "<pedido>"
cScript += " <Nome Cliente>Microsiga Software S/A</Nome
Cliente>"
cScript += " <Endereco>Av. Braz Leme</Endereco>"
cScript += " <Numero>1361</Numero>"
cScript += " <Data>22-03-2005</Data>"
cScript += " <Itens>"
cScript += "
<Item>"
cScript += "
<Produto>Prothues</Produto>"
cScript += "
<Quantidade>1</Quantidade>"
cScript += "
<Preco>100.00</Preco>"
cScript += "
</Item>"
cScript += "
<Item>"
cScript += "
<Produto>ERP<Produto>"
cScript += "
<Quantidade>0</Quantidade>"
cScript += "
<Preco>0</Preco>"
cScript += "
</Item>"
cScript += " </Itens>"
cScript += "</pedido>"
Return cScript

Sintaxe
XmlNode2Arr ( < oRoot > , < cNode2Array > ) --> lRet
Parmetros
Argumento

Tipo

oRoot
cNode2Array

Descrio
Elemento Node no qual ser usado como root para inicio
Objeto
da busca do elemento a ser tranformado em array.
Representa o elemento procurado para ser transformado
Caracter
em array na estrutura.

Retorno
Tipo
Lgico

Descrio
Retorna true caso consiga transformar em array, false caso contrrio.

Descrio
A funo tem o objetivo de transformar em array, um objeto(node) da estrutura do xml.

Informando um elemento(node) da estrutura XML atravs de parametro como raiz, a


funo ir procurar pelo nome do nodo no qual se deseja transformar em array.
Exemplos
No exemplo seguinte demonstrado o simples uso da funo XmlNode2Arr, em que
pegamos o objetoXml e o tranformamos em um array.
Em seguida gravamos esse objeto em arquivo .xml propriamente dito.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "XMLXFUN.CH"
User Function ExeXML()
Local cError
:= ""
Local cWarning := ""
Local oScript
//Gera o Objeto XML ref. ao script
oScript := XmlParser( GeraXML(), "_", @cError, @cWarning )
// Transforma node em uma array, no caso tranforma a estrutura
para array
XmlNode2Arr( oScript:_PEDIDO, "_PEDIDO" )
// Tranforma o Objeto XML em arquivo
// Grava o arquivo em um diretrio \xml a partir do rootPath
SAVE oScript XMLFILE "\xml\teste.xml"
Return .T.

Static Function GeraXML()


Local cScript := '<?xml version="1.0" encoding="UTF-8"?>'
cScript += "<pedido>"
cScript += " <Nome Cliente>Microsiga Software S/A</Nome
Cliente>"
cScript += " <Endereco>Av. Braz Leme</Endereco>"
cScript += " <Numero>1361</Numero>"
cScript += " <Data>22-03-2005</Data>"
cScript += " <Itens>"
cScript += "
<Item>"
cScript += "
<Produto>Prothues</Produto>"
cScript += "
<Quantidade>1</Quantidade>"
cScript += "
<Preco>100.00</Preco>"
cScript += "
</Item>"
cScript += "
<Item>"
cScript += "
<Produto>ERP<Produto>"
cScript += "
<Quantidade>0</Quantidade>"
cScript += "
<Preco>0</Preco>"
cScript += "
</Item>"
cScript += " </Itens>"
cScript += "</pedido>"
Return cScript

Sintaxe
XmlParser ( < cXml > , < cReplace > , < @cError > , < @cWarning > ) --> oXML
Parmetros
Argumento
cXml
cReplace
cError
cWarning

Tipo
Descrio
Caracter a cadeia de caracteres que contm o cdigo XML.
Representa o valor a ser atribuido para os caracteres de
Caracter
espao encontrados na especificao dos nodes XML.
Caso ocorra algum erro durante execuo da funo, a
Caracter
varivel ser preenchida com a descrio do erro ocorrido.
Caso ocorra algum alerta de 'warning' durante execuo da
Caracter funo, a varivel ser preenchida com a descrio do
'warning' ocorrido.

Retorno
Tipo
Objeto

Descrio
Representa um objeto com a estrutura de acordo com o XML.

Descrio
A funo tem o objetivo de retornar um objeto que possu uma estrutura referente
ao xml, passado pelo parametro na funo.
A estrutura retornada:
<ObjXML>
<NodeXML>
-<ArrayNodes>
-REALNAME
-TEXT
-TYPE
Onde REALNAME, TEXT e TYPE so propriedades que todos nodos possuem.
A propriedade ArrayNodes existir quando um nodo possuir mais de um filho, do
mesmo tipo. (demonstrado no exemplo)
Exemplos
Neste exemplo criamos uma funo geraXml que retorna uma string contento um
XML.
Quando passamos essa string para a XmlParser, a funo ir montar o objeto analisando
se a sintaxe e a ordem das tags est bem formada, caso isso nao ocorra a funo ir
retonar um warning ou at um possvel erro, nos parametros informados por referncia.

A estrutura:
oXml:
pedido:
-realName
-type
-text
nome_cliente:
-realName
-type
-text
endereo:
-realName
-type
-text
numero:
-realName
-type
-text
data:
-realName
-type
-text
itens:
-item <- (array)
-item[1]:
-realName
-type
-text
produto:
quantidade:
preco:
-item[2]
-realName
-type
-text
produto:
quantidade:
preco:
-realName
-type
-text

Caso isso nao ocorra a funo ir retornar o objeto contendo uma estrutura em forma de
arvore, no caso a mesma estrutura do xml.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "XMLXFUN.CH"
User Function getObjXML()

Local cError
:= ""
Local cWarning := ""
Local cXML := ""
Local oXml := NIL
//Gera o Objeto XML
oXml := XmlParser( GeraXML(), "_", @cError, @cWarning )
//acessando o CONTEUDO do meu nodo ""
oXml:_PEDIDO:_NOME_CLIENTE:Text := "Microsiga"
// Tranforma o Objeto XML em string
//SAVE oXml XMLSTRING cXML
Return oXml
// funo para gerar uma string contendo um xml
Static Function GeraXML()

Local cScript := '

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

cWarning

Tipo

Descrio
Representa o path de um arquivo .xml, indicando o local
Caracter
onde se encontra o arquivo no disco.
Representa o valor a ser atribuido para os caracteres de
Caracter
espao encontrados na especificao dos nodes XML.
cError Caracter Caso ocorra algum erro durante execuo
Caracter da funo, a varivel ser preenchida com a descrio do
erro ocorrido.
cWarning Array Caso ocorra algum alerta de 'warning'
Caracter durante execuo da funo, a varivel ser preenchida
com a descrio do 'warning' ocorrido.

Retorno
Tipo
Objeto

Descrio
Retorna um objeto q contm uma estrutura de acordo com o XML.

Descrio
A funo tem o objetivo de retornar um objeto que possu uma estrutura referente ao
arquivo .xml, passado pelo parametro na funo.

A estrutura retornada:
<ObjXML>
<NodeXML>
-<ArrayNodes>
-REALNAME
-TEXT
-TYPE
Onde REALNAME, TEXT e TYPE so propriedades que todos nodos possuem.
A propriedade ArrayNodes existir quando um nodo possuir mais de um filho, do
mesmo tipo. (demonstrado no exemplo)
Exemplos
Neste exemplo vamos usar a funo que tem o mesmo objetivo da XmlParser, a
diferena que esta l um arquivo do disco com a extenso .xml.
Quando passamos a string informando o path do arquivo em disco, devemos lembrar
que a procura do arquivo ser feita atravs do rootpath do Protheus.
logo aps a leitura do arquivo a funo ir montar o objeto analisando se a sintaxe e a
ordem das tags est bem formada, caso isso no ocorra a funo ir retonar um warning
ou at um possvel erro, nos parametros informados por referncia.
Caso isso nao ocorra a funo ir retornar o objeto contendo uma estrutura em forma de
arvore, no caso a mesma estrutura do xml.
#INCLUDE "PROTHEUS.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 := "Microsiga"
Return oXml

Você também pode gostar