Árvore de páginas

Versões comparadas

Chave

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

Documentação de função não suportada ou descontinuadodescontinuada.

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.




Descrição

Retorna um objeto, que possui uma estrutura XML, passado por parâmetro.




Sintaxe

Bloco de código
XmlParser( [ cXml ], [ cReplace ], [ cError ], [ cWarning ] )




Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cXml

caractere

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

X


cReplace

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

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

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

NomeTipoDescrição
oXMLobjetoRetorna um objeto com a estrutura de acordo com o XML.




Observações

  • Posterior ao uso da XMLParser() e XMLParserFile(), ocorre a criação dinâmica do objeto XML pelo parser.
  • 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
languagexml
<ObjXML> 
		<NodeXML> 
		-<ArrayNodes> 
		-REALNAME 
		-TEXT 
		-TYPE
Nota

Onde REALNAME, TEXT e TYPE

São propriedades que todos nodos possuem. A propriedade <ArrayNodes> existirá quando um node possuir mais de um filho, do mesmo tipo.
(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 recebido não possua a tag inicial com as propriedades de codificação, é assumido o encoding UTF-8. 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 em formato de tags não-interpretáveis ("&" , ">" , "<" 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".




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

  // 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 += "        <Item>"
  cScript += "            <Produto>Protheus</Produto>"
  cScript += "            <Quantidade>1</Quantidade>"
  cScript += "            <Preco>100.00</Preco>"
  cScript += "        </Item>"
  cScript += "    </Itens>"
  cScript += "</pedido>"
  Return cScript