Vous êtes sur la page 1sur 13

FUNCOES TRATAMENTO XML

Sintaxe XmlChildCount ( < oParent > ) --> nChild Parmetros Argumento oParent Retorno Tipo Numrico 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. Descrio Retorna o numero de elementos encontrados. Tipo Descrio Indica o node XML no qual ele ir fazer a contagem dos Objeto filhos.

Sintaxe XmlChildEx ( < OParent > , < cProcura > ) --> retorno Parmetros Argumento OParent cProcura Retorno Tipo (Qualquer) Descrio Quando a funao encontrar apenas um elemento ser retornado o objeto Tipo Descrio Nodo usado para indicar o inicio da procura do elemento Objeto requerido. Caracter Representa o nome do elemento que desejamos encontrar.

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 Retorno Tipo (NULO) 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. Descrio Nil Tipo Descrio Objeto Representa o objeto node XML no qual ser colando Caracter Indica o nome no qual ser atribuido o node clonado

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

Parmetros Argumento oParent cNode Retorno Tipo (NULO) 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 )

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

Descrio Nil

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 A funo tem o objetivo de retornar um elemento filho da estrutura. Descrio Nil

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 cScript cScript cScript cScript cScript cScript cScript cScript Return cScript

+= += += += += += += += +=

" <Preco>100.00</Preco>" " </Item>" " <Item>" " <Produto>ERP<Produto>" " <Quantidade>0</Quantidade>" " <Preco>0</Preco>" " </Item>" " </Itens>" "</pedido>"

Sintaxe XmlGetParent ( < oNode > ) --> oParent Parmetros Argumento oNode Retorno Tipo Objeto 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 Retorno Tipo Objeto Descrio Nil 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 Descrio Um objeto posicionado no node de acordo com o argumento passado. Tipo Descrio representa o node no qual ser usado como referncia para o Objeto retorno do node pai.

Descrio 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 oRoot cNode2Array Retorno Tipo Lgico Descrio Descrio Retorna true caso consiga transformar em array, false caso contrrio. Tipo 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 em Caracter array na estrutura.

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 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. Descrio Representa um objeto com a estrutura de acordo com o 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 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.

cWarning

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

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