Árvore de páginas

A classe TXMLManager representa um documento XML (Extensible Markup Language). Esta classe implementa partes dos modelos DOM (Document Object Model) nível 1 principal e o núcleo DOM nível 2.0, e XPATH (XML Path Language) versão 1.0.

Hierarquia

  • TXmlManager

Construtores

Propriedades

Métodos

Observações

  • DOM - Document Object Model (Modelo de Objetos de Documentos) - é uma representação de um documento XML em árvore na memória(cache) que permite a navegação e edição do documento.
  • XPath - XML Path Language (Linguagem de Caminhos XML) é uma linguagem para localizar informações em um documento XML. XPath é usado para navegar através de elementos e atributos em um documento XML.
  • Para obter mais informações dos modelos regulamentados pela W3C - World Wide Web Consortium, acesso o endereço: http://www.w3c.org.
  • Além disso, essa classe possui diversos métodos tanto em sua implementação DOM e XPath para: Acesso, Alteração, Inclusão, Exclusão e Pesquisa de elementos do XML. Desta forma, para um boa compreensão sobre essa implementação de XML, é fundamental o entendimento da utilização de XPath e o conhecimento do XML para navegação com base no DOM.

Exemplos

Exemplo 1
#include "protheus.ch"

user function tstXmlCls()
  Local cXML := ""
  Local oXML
  Local xRet
  Local nI := 0, nLen:= 0
  Local lLoop := .T., lRet1 := .F., lRet2 := .F.

  oXML := TXmlManager():New()

  cXML := '<?xml version="1.0"?>' + CRLF
  cXML += '<bookStore name="Saraiva" country="BR">' + CRLF
  cXML += '  <foundation>' + CRLF
  cXML += '    <founder>Seu Saraiva</founder>' + CRLF
  cXML += '    <year>1914</year>' + CRLF
  cXML += '  </foundation>' + CRLF
  cXML += '  <books>' + CRLF
  cXML += '    <book isNew="true">' + CRLF
  cXML += '      <title>A Game of Thrones</title>' + CRLF
  cXML += '      <author>George R. R. Martin</author>' + CRLF
  cXML += '      <price>9.99</price>' + CRLF
  cXML += '      <origin>US</origin>' + CRLF
  cXML += '    </book>' + CRLF
  cXML += '    <book isNew="true">' + CRLF
  cXML += '      <title>A Clash of Kings</title>' + CRLF
  cXML += '      <author>George R. R. Martin</author>' + CRLF
  cXML += '      <price>9.99</price>' + CRLF
  cXML += '      <origin>US</origin>' + CRLF
  cXML += '    </book>' + CRLF
  cXML += '  </books>' + CRLF
  cXML += '</bookStore>' + CRLF

  xRet := oXML:Parse( cXML )
  if xRet == .F.
    conout( "Error: " + oXML:Error() )
    return
  endif

  while lLoop
    conout( "Name: " + oXML:CNAME )
    conout( "Path: " + oXML:CPATH )
    conout( "Value: " + oXML:CTEXT )

    xRet := oXML:DOMHasAtt()
    if !xRet
      conout( "No attributes" )
    else
      xRet := oXML:DOMGetAttArray()
      nLen := Len( xRet )
      conout( cValToChar( nLen ) + " attributes:" )
      for nI := 1 to nLen
        conout( "Attribute " + cValToChar( nI ) )
        conout( "Name: " + xRet[nI][1] )
        conout( "Value: " + xRet[nI][2] )
        conout( "" )
      next nI
    endif

    xRet := oXML:DOMHasNextNode()
    conout( "Next node: " + IIf( xRet == .T., "Yes", "No" ) )

    xRet := oXML:DOMHasPrevNode()
    conout( "Previous node: " + IIf( xRet == .T., "Yes", "No" ) )

    xRet := oXML:DOMHasParentNode()
    conout( "Parent node: " + IIf( xRet == .T., "Yes", "No" ) )

    xRet := oXML:DOMHasChildNode()
    conout( "Children node: " + IIf( xRet == .T., "Yes", "No" ) )

    xRet := oXML:DOMChildCount()
    conout( "# of Children: " + cValToChar( xRet ) )

    if oXML:DOMHasChildNode()
      xRet := oXML:DOMChildNode()
    elseif oXML:DOMHasNextNode()
      xRet := oXML:DOMNextNode()
    else
      lRet1 := oXML:DOMParentNode()
      if lRet1
        lRet2 := oXML:DOMNextNode()
        
        while !lRet2
          lRet1 := oXML:DOMParentNode()
          lRet2 := oXML:DOMNextNode()
          
          if !lRet1 .And. !lRet2
            return
          endif
        enddo
        
        loop
      else
        conout( "Error not possible, once it came from a parent" )
        return
      endif
    endif
    
    if xRet == .F.
      conout( "Error: " + oXML:Error() )
      return
    endif
  enddo
return