Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Portuguese

Pagetitle
XmlParser
XmlParser

Função: XmlParser

Retorna

um

objeto,

que

possui

uma

estrutura

XML,

passado

por

parâmetro.

Sintaxe

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

 

 [ cXml ], [ cReplace ], [ cError ], [ cWarning ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cXml

Caracter

caractere

Indica uma string que contém o código XML.

X

 

 

cReplace

Caracter

caractere

Indica o valor que será atribuído como prefixo para a nomenclatura das propriedades do objeto XML em Advpl a partir dos nomes dos nodes do documento XML. Será usando também na substituição de qualquer caractere usado no nome do node XML que não faça parte da nomenclatura de uma variável Adppl, como espaços em branco por exemplo.

X

 

 

cError

Caracter

caractere

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

X

 

X

 

cWarning

Caracter

caractere

Caso ocorra alguma advertência durante execução da função, a variável será preenchida com a descrição da advertência ocorrida.

X

 

X

 

Retorno

Nome

Tipo

Descrição

oXML

(

objeto

)

Retorna um objeto com a estrutura de acordo com o XML.

Observações

  • A estrutura retornada:

    Bloco de código
    languagexml
    themeEclipse
    linenumberstrue
    collapsefalse
    	<ObjXML>

<NodeXML>
-<ArrayNodes>
-REALNAME
-TEXT
-TYPE
  •  
    		<NodeXML> 
    		-<ArrayNodes> 
    		-REALNAME 
    		-TEXT 
    		-TYPE 
    

Onde REALNAME, TEXT e TYPE

são

São propriedades que todos nodos possuem.

A propriedade <ArrayNodes> existirá quando um node possuir mais de um filho, do mesmo tipo.
(

demonstrado

Demonstrado no exemplo).

 

Tratamento de "encoding" e caracteres especiais

A string contendo o XML pode conter uma especificação/atributo de codificação (encoding) usado das tags de conteúdo do XML. As identificações mais comuns são UTF-8 e iso-8859-1.
Caso

o XML

o XML recebido não possua a tag inicial com as propriedades de codificação, é assumido o encoding UTF-8.

 Caso

Caso o XML recebido, como parâmetro, possua nodes onde o conteúdo não esteja corretamente codificado em UTF-8, a geração do Objeto XML vai falhar, indicando na variável de erro a informação "Input is not proper UTF-8, indicate encoding ! ".
Isto indica uma inconsistência no documento XML, que deve ser resolvida pelo programa/aplicação que montou/forneceu a string XML.
Existem também restrições à interpretação de caracteres especiais ou caracteres de controle dentro do documento XML. Um node de dados XML pode conter os caracteres especiais &

 

(e-Comercial), < (menor), > (maior), entre outros, desde que estes

estejam representados

estejam representados em formato de tags não-interpretáveis ("&

amp;

" ,

 

"

&gt;

>" , "

&lt;

<" respectivamente).
Ao ser tratado pela função XMLParser, o conteúdo do node será convertido para a representação literal automaticamente.
Caso um XML seja montado sem o tratamento para tags não-interpretáveis, e enviar como conteúdo o texto "A & B LTDA", a geração do objeto XML vai falhar, indicando na variável de erro a informação

 

"xmlParseEntityRef: no name".

/*Neste exemplo criamos uma função geraXml que retorna uma string contento um XML. Quando passamos essa string para
a XmlParser, a função irá montar um objeto Advpl correspondente à estrutura de dados / nodes do XML. caso isso nao
ocorra a função irá retonar NIL, e uma informação de advertência ou erro será retornada nos parametros informados
por referência.
A estrutura:
oXml:
pedido:
-realName
-type
-text
nome_cliente:
-realName
-type
-text
endereço:
-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 */


Exemplo

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


  #INCLUDE "XMLXFUN.CH"



  User Function getObjXML()


  Local cError   := ""


  Local cWarning := ""


  Local oXml := NIL



  //Gera o Objeto XML


  oXml := XmlParser( GeraXML(), "_", @cError, @cWarning )


  If (oXml == NIL )


    MsgStop("Falha ao gerar Objeto XML : "+cError+" / "+cWarning)

Return
Endif

    Return
  Endif

  // Mostrando a informação do Node


  MsgInfo(oXml:_PEDIDO:_NOMECLIENTE:Text,"Cliente")



  Return oXml



  // função para gerar uma string contendo um xml


  Static Function GeraXML()


  Local cScript


  cScript := '<?xml version="1.0" encoding="ISO-8859-1"?>'


  cScript += "<pedido>"


  cScript += "
 
   
 
 <Nome_Cliente>Microsiga Software</Nome_Cliente>"


  cScript += "
 
   
 
 <Endereco>Av. Braz Leme</Endereco>"


  cScript += "
 
   
 
 <Numero>1361</Numero>"


  cScript += "
 
   
 
 <Data>22-03-2005</Data>"


  cScript += "
 
 
 
 
<Itens>"
cScript
 
+=
 <Itens>"
 

 
 
 
    <Item>"
cScript += "
 
 
 
 
 
 
 
 
 
 
 
 
<Produto>Protheus</Produto>"
cScript
 
+=
 <Item>"
            <Quantidade>1</Quantidade>"

  cScript += "
 
 
 
 
 
 
 
 
 
 
 
 
<Preco>100.00</Preco>"
cScript
 
+=
 
 
 
 
 
 
 
 
<
<Produto>Protheus</
Item>"
cScript += "    </Itens>"
Produto>"
  cScript += "
</pedido>"
Return cScript
/*No
 
exemplo
 
abaixo,
 
usamos
 
um
 
conteudo
 
com
 
caracteres
 
acentuados
 
e
 
caracteres
 
especiais
 
para
<Quantidade>1</Quantidade>"
 
ser
 
colocado dentro
de um node XML. Utilizamos as funcoes EncodeUTF8() para gerar um conteudo adequado à codificação do XML, e uma
função de framework _NoTags() para transformar eventuais tags interpretaveis que possam existir dentro do conteúdo
para serem representadas como conteudo do node XML*/
User Function XMLEnc()
Local cNome := 'A&B-ZÃO LTDA'
Local cXml
cScript += "            <Preco>100.00</Preco>"
  cScript += "       
:=
 
""
Local cErro :
</Item>"
  cScript += "
"
Local cAviso
 
:=
 
""
cXml
 
+=
 
'<?xml version="1.0" encoding="UTF-8"?>'
cXml += "<Teste>"
cXml += EncodeUTF8( _NoTags( cNome ) )
cXml
</Itens>"
  cScript += "</
Teste>"
conout("XML Original....:")
conout(cXml)
oXml := XmlParser(cXml,"_",@cErro,@cAviso)
MsgInfo(oXml:_TESTE:TEXT , "Conteudo" )
Return
pedido>"
  Return cScript

Abrangência

Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server

 

Veja também