Lire un document XML avec Paradox: un exemple utilisant Microsoft XML

Le code ObjectPAL suivant démontre comme utiliser Microsoft XML depuis Paradox pour parcourir l'intégralité d'un document XML au moyen de l'API DOM XML.

Une présentation beaucoup plus complète sur Paradox et XML a été donnée lors de la Convention Internationale Paradox 2003, et est présentée sur un site dédié: Paradox et XML

var
  ss                string
  doingAttributes   logical
  endvar

;----------------------------------------------------------------
proc doChildrenOf(var Parentnode OleAuto)

  var
    cAttributeNodes,cNodes      oleAuto
    ThisNode,ThisAttributeNode  oleAuto
    endvar

  try
    cnodes = Parentnode.ChildNodes ; get the list of child nodes
    for i from 1 to cnodes^length
      ThisNode = cnodes.nextNode
      message(ThisNode^nodeValue)
      nodeType = ThisNode^nodeType
      switch
        case nodeType =  1:        ; ELEMENT
          ss = ss + "\r\n"
          ss = ss + ThisNode^tagName
          ;-- now get the list of attributes for this Element node
          cAttributeNodes = ThisNode.Attributes
          for j from 1 to cAttributeNodes^length
            ThisAttributeNode = cAttributeNodes^NextNode
            ss = ss + " (" + ThisAttributeNode^Name
            doingAttributes = TRUE
            doChildrenOf (ThisAttributeNode)
            ThisAttributeNode.Close ()
            endfor
          cAttributeNodes.Close ()
          doingAttributes = FALSE
          doChildrenOf (ThisNode)
        case NodeType =  2:        ; ATTRIBUTE
          doChildrenOf (ThisNode)
        case NodeType =  3:        ; TEXT
          ss = ss + " = " + ThisNode^nodeValue
          ;-- if doing an attribute value, 
          ;   put in the closing parenthesis
          if doingAttributes then
            ss = ss + ")"
            endif
        case NodeType =  4:        ; CDATA_SECTION
        case NodeType =  5:        ; ENTITY_REFERENCE
          doChildrenOf (ThisNode)
        case NodeType =  6:        ; ENTITY
          doChildrenOf (ThisNode)
        case NodeType =  7:        ; PROCESSING_INSTRUCTION
        case NodeType =  8:        ; COMMENT
        case NodeType =  9:        ; DOCUMENT
        case NodeType = 10:        ; DOCUMENT_TYPE
          doChildrenOf (ThisNode)
        case NodeType = 11:        ; DOCUMENT_FRAGMENT
          doChildrenOf (ThisNode)
        case NodeType = 12:        ; NOTATION
        otherwise:
          msgStop ("Unknown Node Type: " + string(NodeType),"")
        endswitch
      endfor

    ThisNode.close ()
    cnodes.close ()
  onfail
    errorShow ()
    endtry

  endproc

;----------------------------------------------------------------
method pushButton(var eventInfo Event)

  const 
    URL = "http://www.osinet.fr/xlink/xlinkxsa.xml"
    endConst

  var
    oDOM  OleAuto
    doc     OleAuto
    endVar

  if NOT oDOM.open ("Microsoft.XMLDOM") then
    errorShow()
    return
    endif

  oDOM.async = False

  if NOT oDOM.load (URL) then
    errorShow ()
    return
    endif

  doc = oDOM^documentElement
  ss = ""
  doingAttributes = FALSE
  doChildrenOf (doc)

  MyMemo.Text = ss
  doc.Close ()
  oDom.Close ()

  endMethod

Ce code doit être placé dans un conteneur adéquat, typiquement une fiche ou une page contenant la fiche. La méthode à appeler directement est pushButton, à placer typiquement sur un bouton, et la méthode récursive doChildrenOf réalise le travail réel.

Tip fourni par Frédéric G. MARAND et John CORKILL, adapté et publié avec autorisation des auteurs. Tous droits réservés.


Get started with Drupal 7

Marques les plus citées

toutes les marques

acheter sur OSInet

Accès direct

Recherche

Le mot du jour

BSOD

Blue Screen Of Death

in | |

cf Ecran bleu 

Syndiquer le contenu

Dernières définitions

Chrome - Chromium - digitaalisen kuilun - ghetto sharding - HTTP - MongoDB - PNaCl - QUIC - Skia - SPDY

Un mot au hasard

IRIA : Institut de recherche d'informatique et d'automatique  

Alertes CERTA