Vi è mai capitato di dover leggere un file XML in VB6? NO? a me si, vediamo insieme cosa fare per leggere questo formato dal buon vecchio linguaggio VB6.
Ancora Visual Basic 6?!?
Linguaggio di programmazione in disuso in quasi tutti gli scenari informatici moderni, Microsoft Visual Basic 6.0 risulta essere ancora il fondamento della maggior parte di applicazioni per l'automazione industriale. Il formato XML, nonostante adesso venga quasi del tutto sostituito con formati "più leggeri" come il JSON, è un altro componente molto frequente del mio settore.Microsoft XML
La libreria che dobbiamo utilizzare per leggere un file XML (per fortuna) è già contenuta nel sistema operativo in uso, per referenziarla sarà sufficiente cercare la voce "Microsoft XML V3.0" (msxml3.dll).
DOM, alberi e figli.
Partiamo dal concetto che ogni file XML viene trattato in un oggetto di tipo DOM (Document Object Model) che ripropone al programmatore la struttura logica di un albero (nodi e figli) per l'esplorazione di un file XML. Supponiamo di avere il file "C:\file.xml" con il seguente contenuto:<root>
<a>
<words>
<word value="auto"/>
<word value="apple"/>
<word value="anchor"/>
</words>
</a>
<b/>
<c/>
<d name="D" ascii="68" hex="44"/>
</root>
Se volessimo conoscere l'elenco dei nodi figli del nodo radice il nostro codice sarà il seguente:
Ogni volta che si accede al nodo, possiamo utilizzare la ricorsione per accedere di nuovo ai figli del nodo figlio.
Per ogni nodo a cui abbiamo accesso, possiamo anche esplorare gli attributi:
Dim DOM as new DOMDocument
Dim nodes as IXMLDOMNodeList
Dim node as IXMLDOMNode
DOM.load "C:\file.xml"
Set nodes = DOM.selectNodes("//root")
Set nodes = nodes(1).childNodes
For Each node in nodeList
'do something with them
Next
Ogni volta che si accede al nodo, possiamo utilizzare la ricorsione per accedere di nuovo ai figli del nodo figlio.
[...]
For Each node in nodeList
if node.nodeName = "a" then
Dim wordsNode as IXMLDOMNode
Dim wordNode as IXMLDOMNode
set wordsNode = node.childNodes(1)
For Each wordNode in wordsNode.childNodes
'do something with them
Next
end if
Next
Per ogni nodo a cui abbiamo accesso, possiamo anche esplorare gli attributi:
[...]
For Each node in nodeList
if node.nodeName = "d" then
Dim a as IXMLDOMAttribute
For Each a in node.attributes
'do something with them
Next
end if
Next
Nessun commento:
Posta un commento