Variables a Crear
locautXmlDoc Automation 'Microsoft XML, v6.0'.DOMDocument
XMLNodeList Automation 'Microsoft XML, v3.0'.IXMLDOMNodeList
XMLNode Automation 'Microsoft XML, v3.0'.IXMLDOMNode
XMLNodeBucle Automation 'Microsoft XML, v3.0'.IXMLDOMNode
vConta Integer
vConta2 Integer
Tambien es necesario crear dos funciones para tratar los ficheros. Una función es para recorrer los nodos del propio Xml (LoadNodeList) y otra que recorra todos los nodos pero de la lista que ya hemos leido(Load node)
Funcion LoadNodeList
XMLDocument : Automation "'Microsoft XML, v3.0'.IXMLDOMDocument2";VAR XMLNodeList : Automation "'Microsoft XML, v3.0'.IXML;VAR ElementName:Text
XMLNodeList := XMLDocument.getElementsByTagName(ElementName);
Funcion LoadNodelist
XMLNodeList : Automation "'Microsoft XML, v3.0'.IXMLDOMNodeList";VAR XMLNode : Automation "'Microsoft XML, v3.0'.IXMLDOMNode";VAR RecordIndex:Integer
XMLNode := XMLNodeList.item(RecordIndex);
Una vez creadas estas funciones que nos van a ayudar a reconocer los elementos del xml vamos con el cuerpo del código. Se ha hecho un aplicación que lea nodos hasta un máximo de dos niveles de jerarquía. Si existiesen más niveles unicamente sería necesario ir añadiendo código siguiendo el mismo criterio que el primero de los hijos.
Código
XMLDocument.load('C:\NewPolizaInstance.xml'); //se carga el fichero
LoadNodeList(XMLDocument,XMLNodeList,'newPolizaInstanceResponse');//se cargan los nodos a partir del descrito
TotNumbOfRecsA := XMLNodeList.length; //se sacan el numero de nodos
LoadNode(XMLNodeList,XMLNode,0); //se cargan los nodos de la lista que hemos sacado
IF TotNumbOfRecsA > 0 THEN REPEAT
//aquí empezamos a recorrer los hijos que cuelgan del metodo buscado
XMLNodeList2 :=XMLNode.childNodes;
LoadNode(XMLNodeList2,XMLNodeBucle,0);
//cargamos los nodos hijos
IF XMLNodeBucle.hasChildNodes THEN
FOR vConta:=0 TO XMLNodeList2.length DO BEGIN
//si cada nodo hijo tiene hijos se recorre
//comprobar que tiene hijos el nodo
XMLNodeList3:=XMLNodeBucle.childNodes;
//aquí el tercer nivel de jerarquia
LoadNode(XMLNodeList3,XMLNodeBucle2,0);
IF XMLNodeBucle2.hasChildNodes THEN
FOR vConta2:=0 TO XMLNodeList3.length DO BEGIN
IF UPPERCASE(XMLNodeBucle2.nodeName) = 'PR' THEN
//con esto se opera para un nodo en concreto, en este caso
XMLNodeComprobar :=XMLNodeBucle2.childNodes.item(0);
// se introduce la información en una tabla en caso de que
IF NOT ISCLEAR(XMLNodeComprobar) THEN
// el nodo se llame programa
rLecturaXml.text1:=XMLNodeComprobar.text;
END;
XMLNodeBucle := XMLNodeList2.nextNode;
END;
XMLNode := XMLNodeList.nextNode;
UNTIL ISCLEAR(XMLNode);
Tambien es necesario crear dos funciones para tratar los ficheros. Una función es para recorrer los nodos del propio Xml (LoadNodeList) y otra que recorra todos los nodos pero de la lista que ya hemos leido(Load node)
Funcion LoadNodeList
XMLDocument : Automation "'Microsoft XML, v3.0'.IXMLDOMDocument2";VAR XMLNodeList : Automation "'Microsoft XML, v3.0'.IXML;VAR ElementName:Text
XMLNodeList := XMLDocument.getElementsByTagName(ElementName);
Funcion LoadNodelist
XMLNodeList : Automation "'Microsoft XML, v3.0'.IXMLDOMNodeList";VAR XMLNode : Automation "'Microsoft XML, v3.0'.IXMLDOMNode";VAR RecordIndex:Integer
XMLNode := XMLNodeList.item(RecordIndex);
Una vez creadas estas funciones que nos van a ayudar a reconocer los elementos del xml vamos con el cuerpo del código. Se ha hecho un aplicación que lea nodos hasta un máximo de dos niveles de jerarquía. Si existiesen más niveles unicamente sería necesario ir añadiendo código siguiendo el mismo criterio que el primero de los hijos.
Código
XMLDocument.load('C:\NewPolizaInstance.xml'); //se carga el fichero
LoadNodeList(XMLDocument,XMLNodeList,'newPolizaInstanceResponse');//se cargan los nodos a partir del descrito
TotNumbOfRecsA := XMLNodeList.length; //se sacan el numero de nodos
LoadNode(XMLNodeList,XMLNode,0); //se cargan los nodos de la lista que hemos sacado
IF TotNumbOfRecsA > 0 THEN REPEAT
//aquí empezamos a recorrer los hijos que cuelgan del metodo buscado
XMLNodeList2 :=XMLNode.childNodes;
LoadNode(XMLNodeList2,XMLNodeBucle,0);
//cargamos los nodos hijos
IF XMLNodeBucle.hasChildNodes THEN
FOR vConta:=0 TO XMLNodeList2.length DO BEGIN
//si cada nodo hijo tiene hijos se recorre
//comprobar que tiene hijos el nodo
XMLNodeList3:=XMLNodeBucle.childNodes;
//aquí el tercer nivel de jerarquia
LoadNode(XMLNodeList3,XMLNodeBucle2,0);
IF XMLNodeBucle2.hasChildNodes THEN
FOR vConta2:=0 TO XMLNodeList3.length DO BEGIN
IF UPPERCASE(XMLNodeBucle2.nodeName) = 'PR' THEN
//con esto se opera para un nodo en concreto, en este caso
XMLNodeComprobar :=XMLNodeBucle2.childNodes.item(0);
// se introduce la información en una tabla en caso de que
IF NOT ISCLEAR(XMLNodeComprobar) THEN
// el nodo se llame programa
rLecturaXml.text1:=XMLNodeComprobar.text;
END;
XMLNodeBucle := XMLNodeList2.nextNode;
END;
XMLNode := XMLNodeList.nextNode;
UNTIL ISCLEAR(XMLNode);