0% encontró este documento útil (0 votos)
99 vistas1 página

Leer XML con FoxPro y MSXML

El documento describe el DOM (Document Object Model) y cómo se puede usar para leer y acceder a nodos en un archivo XML con FoxPro. Explica que el DOM representa documentos XML y HTML como un árbol de nodos que puede ser navegado y manipulado. Luego muestra un ejemplo básico de cómo cargar un archivo XML, seleccionar nodos y extraer texto usando el objeto MSXML en FoxPro.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
99 vistas1 página

Leer XML con FoxPro y MSXML

El documento describe el DOM (Document Object Model) y cómo se puede usar para leer y acceder a nodos en un archivo XML con FoxPro. Explica que el DOM representa documentos XML y HTML como un árbol de nodos que puede ser navegado y manipulado. Luego muestra un ejemplo básico de cómo cargar un archivo XML, seleccionar nodos y extraer texto usando el objeto MSXML en FoxPro.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

TI Servicios Inicio Productos Descargar Blog Ayuda Nosotros

FoxPro y el DOM XML


miércoles, agosto 5th, 2020

Que es el DOM
Document Object Model, o bien Modelo de objetos de documentos. El
DOM es un estandar de miscrosoft para representar archivos XML
HTML y otros documentos de marcado extensible, es decir
documentos que usan los simbolos «<>» para construir un contenido.

Ejemplo:

<NuevoDocumento>
<titulo>
Documento Hola Mundo
</titulo>
<cuerpo>
Cuerpo del documento
</cuerpo>
</NuevoDocumento>

Los archivos XML pueden ser muy parecidos al HTML que se usa para
páginas web, pero en realidad son cosas distintas, el XML es un
lenguaje mas ordenado en el cual los nodos e información descriptiva
esta delimitadamente con claridad. El HTML por ejemplo tu puedes
abrir una etiqueta tras otra sin preocuparte de cumplir estandares, los
navegadores leerán el documento a como de lugar.

Estrutura básica de arbol de un DOM


El DOM por lo tanto es la forma de representar estos objetos, y susa
mucho en programación para brindar una forma estandarizada de
acceder a la informacion de los documentos.

Imagen gracias a Microsoft : https://docs.microsoft.com/en-


us/previous-versions/windows/desktop/ms763802(v=vs.85)

La idea detrás del DOM es contar con una forma estructurada de


mostrar información y hacerla accesible para los programas que
utilizan los datos, para hacerlo los parseadores de XML crean un arbol
de nodos.

Arbol del DOM


Elemento Raiz
Elemento Hijo1
Texto del Elemento
Elemento Hijo 2
Texto del Elemento

Lo anterior es una representación simple de un DOM, retomaremos


mas adelante esta estructura para explicar un par de cosas.

Que se necesita para leer XML con


FOXPRO
Hace años ya que Microsoft implemento su tecnología de webservices
para el tratamiento de documentos XML, recuerdo bien esto porque
era apenas un adolescente y estudiante de bachillerato, cuando se
anunció con bombo y plantillo toda la estrategia punto net que
dominaría la agenda de desarrollo para los próximos años.

En aquella época el acceso a nuestro país era practicamente nulo


(1998) y muchos todavía no entendiamos de que se trataba todo este
asunto de los web services y los XML; se hablaba mucho de que los
sitios web eran islas de información y que para poder extraer toda
esta información atrapada en esas islas se necestiba crear puertos vias
de comunicacion entre ellas para que los datos circulasen libremente.

El resultado fueron los servicios XML, como dije antes Microsoft


anunciaba esta tecnología con bombo y platillo pues era su mayor
apuesta por la nube, en aquellos entonces simplemente le deciamos
internet.

MSXML y los servicios XML


El MSXML es un standar para varios lenguajes, Jscript VbScript .NET,
C y C++, por lo que no es exclusivo para FOXPRO, lo que sucede es que
se accede por medio de COM. Punto NEt tiene su propia libreria para
XML integrada en el Framework por lo que no es recomendable
utilizarlo en esta plataforma de desarrollo.

Existen varias versiones del MSXML, de la wikipedia les comparto la


siguiente tabla.

MSXML 3.0 MSXML3 MSXML 6.0 MSXML6

Version más antigua Es la última version

Se entrega con : Sql Server Visual


Se entrego con Windows
Studio, Punto NET Framework,
XP, Internet Explore 6.0,
Windows Vista, Windows 7, Windows
7.0,8.0, Windows XP SP2
XP SP3,

Historia de MSXML
Toda esta serie de estandares, herramientas y librerías se le bautizo
con el nombre de MSXML Microsoft XML Core Service. recuerdo que
a todos los que habiamos aprendido algo de lenguaje Java en aquella
época nos parecía una copia burda del JDK, y es que ene efecto lo fue,
punto net, MSXML y otra tecnologías eran una copia descarada de
todo lo que Sun Microsystem (Dueña de Java en aquel entonces),
ahora ya nadie lo recuerda.

Trabajar con XML y FOXPRO


Con la llegada de la factura electrónica a muchos paises de
Latinoamérica algunos progamas viejos desarollados en foxpro,
tuvieron que adaptarse para el trabajo con los xml que producen las
plataformas de las administraciones scales; por lo que muchos
programadores se vieron en la necesidad de aprender esta tecnología,
yo soy uno. A continuación te comparto lo aprendido.

Leer Un Archivo XML con FOXPRO


Antes que nada crearemos un archivo XML válido para poder trabajar
con él, que luego iremos extendiendo para ir demostrando los
ejemplos.

<ElementoRaiz>
<Hijo1>Chepe</Hijo1>
<Hijo2>Juan</Hijo2>
</ElementoRaiz>

Por el momento es un archivo sencillo, solo para demostrar algunas


funciones básicas. Recuerda que los archivos XML no pueden llevar
espacios en los nombres de los nodos por ejemplo : «Elemento Raiz»
tambien no deben llevar tildes o caracteres especiales; debes tomar en
cuenta las minusculas y mayusculas para trabajar con los nodos.

Pasemos pues a la lectura del archivo anterior

Para leer archivos XML con FoxPro debes primero crear una instancia
del objeto MSXML, esto se hace realizando los siguiente pasos:

Paso 1) Crear el objeto MSXML


Debes crear el objeto MSXML y luego cargar el archivo que contiene
el archivo XML para ello usamos el método Load

lcFile="ejemplo.xml"
loXML= CREATEOBJECT('MSXML2.DOMDocument')
loXML.LOAD(lcFile)

Paso 2) Obtener algun nodo


El siguiente paso es obtener algún nodo para poder trabajar con él,
para ello usaremos el método selectSingleNode()

node= loXML.selectSingleNode("//")

Te preguntarás que signi can las dos barritas o plecas «//». Esto
signi ca que podemos acceder a todos los nodos del segundo nivel del
archivo xml y obtener el texto del mismo, poniendo las 2 plecas
obtendremos acceso a los 2 nodos hijos del archivo de ejemplo XML es
decir que obtenemos los nodos de Chepe y Juan

Paso 3) Extraer el texto de dicho nodo.


Ahora que ya tenemos creado el objeto node ya se puede obtener el
texto del mismo, la ventaja es que al hacerlo, obtendremos una
representacion en xml de todos los subnodos, o bien el texto del nodo.

?node.text

La propiedad Text nos devuelve la siguiente salida :

Chepe Juan

El anterior ejemplo todo junto queda asi:

lcFile="events.xml"
loXML= CREATEOBJECT('MSXML2.DOMDocument')
loXML.LOAD(lcFile)
node= loXML.selectSingleNode("//")
?node.text

El anterior ejemplo es sumamente sencillo, solo para entender como


se organizan los nodos y como obtener algun texto del archivo XML,
sin embargo existen más métodos y propiedades que puedes usar, las
detallaremos mas adelante en este articulo.

Entender las rutas de acceso a los nodos


Algo importante que debes comprender antes de trabajar con nodos
es como funcionan las rutas de acceso o «paths» para obtener un
nodo, casi todo lo que tengas que hacer con un archivo XML tiene que
ver con obtener el nodo correcto.

Por ejemplo en el archivo XML solo hay dos niveles, por lo que
simpli camos el acceso a los textos del nodo Hijo1 e Hijo2
simplemente escribiendo dos plecas, pero que pasaría si estos los hijos
tuvieran un nivel mas de descripción por ejemplo un sub nodo edad.

<ElementoRaiz>
<Hijo1>
<Nombre>Chepe</Nombre>
<Edad>12</Edad>
</Hijo1>
<Hijo2>
<Nombre>Juan</Nombre>
<Edad>7</Edad>
</Hijo2>
</ElementoRaiz>

Se ha creado un sub nodo nombre y otro edad, ahora que pasa si


deseo acceder solo a los ementos del nodo Hijo1, ¿cómo debo escribir
la ruta de acceso a ese nodo ?

node= loXML.selectSingleNode("//Hijo1")

El resultado al consultar la propiedad text del nodo seria y la edad y el


nombre juntos:

Chepe12

A continuacion te dejo una pequeña tabla donde puesde ver las


posible rutas y el resultado según se use para nuestro archivo de
ejemplo:

selectSingleNode(«//Hijo1») Chepe12

selectSingleNode(«//Hijo2») Juan7

selectSingleNode(«//Hijo1/Edad») 12

selectSingleNode(«//Hijo2/Edad») 7

selectSingleNode(«//Hijo1/Nombre») Chepe

selectSingleNode(«//Hijo2/Nombre») Juan

La propiedad XML de un node


Si deseas devolver la estructura xml del nodo puedes hacerlo,
recuerda que el objetivo de usar XML es que puedas obtener un
documento estructurado y no simplemente una cadena de texto, un
archivo estructurado te permite un mejor control sobre los datos y
cuando se trat ade XML tu puedes de nir en el mismo archivo a el
documento, de modo que la aplicacion que lo leera no tiene que saber
de antemano cual es la estrucutura de dicho archivo.

Por ejempo la propiedad XML del Objeto NODE del ejemplo anterior
nos devuelve lo siguiente:

node= loXML.selectSingleNode("//")
?node.xml

Salida :

<ElementoRaiz>
<Hijo1><Nombre>Chepe</Nombre><Edad>12</Edad></Hijo1>
<Hijo2><Nombre>Juan</Nombre><Edad>7</Edad></Hijo2>
</ElementoRaiz>

Los anteriore sejemplos sirven bien para un solo nodo, pero si lo que
necesito es recorrer todos los nodos de un XML y leer sus valores
entonces necesito el objeto NodeList, en el próximo parrafo te explico
este objeto.

Recorrer los elementos de un XML en FOXPRO


Si lo que necesitamos es recorrer por medio de una estructura for
todos los elementos de un archivo XML en FoxPro, entonces
necesitamos recurrir al objeto nodeList.

node= loXML.selectSingleNode("//")
oNodeList=node.childNodes
FOR EACH nde IN oNodeList
?nde.text
ENDFOR

La salida del anterior ejemplo seria como sigue:

Chepe12
Juan7

Tambien puede acceder a un elemento directamente por metio de la


propiedad ITEM, por ejemplo si deseo acceder al elemento Hijo1 lo
haríamos así:

?oNodeList.item(0).text

Recuerda que en fox las matrices empiezan con 1 pero en este objeto
los elementos empiezan en cero 0, por lo que no debes confundirte
sobre todo en caso que utilices un bucle «for n=1 to » , en ese caso el
ejemplo anterior debería quedar así:

FOR i=1 TO oNodeList.length


?oNodeList.item(i-1).text
ENDFOR

La salida sería exactamente la misma que cuando usamos ForEach, si


te jas bien, verás que le hemos restado uno al indice del bucle FOR
esto es por que los elementos en el objeto nodeList, empiezan en cero

Chepe12
Juan7

Crear un archivo XML con FOXPRO


Próximamente

Compartir esto en:

Más información

Contabilidad
Contabilidad Reformas
Reformas de
de ley
ley yy
Así
Así es
es la
la nueva
nueva Ley
Ley Distribuida,
Distribuida, así
así es
es otros
otros avances
avances sobre
sobre
Reguladora
Reguladora del
del como
como puedes
puedes factura
factura
Ejercicio
Ejercicio de
de la…
la… consolidar
consolidar la…
la… electrónica,…
electrónica,…

Con
Con gurar
gurar
Instalar
Instalar un
un nuevo
nuevo Orientación
Orientación yy
CSS
CSS apuntes
apuntes proyecto
proyecto en
en tamaño
tamaño del
del papel
papel
básicos
básicos Angular
Angular 10
10 programáticamente…
programáticamente…

Deja una respuesta


Lo siento, debes estar conectado para publicar un comentario.

Categorías
Bases de Datos (7)
Firebase (6)
Calendario (2)
Contaportable (6)
Contaportable Contabilidad Catalogo (1)
Debian (5)
Herramientas (1)
Impuestos (4)
Ministerio de Hacienda (3)
Programación (16)
Angular (3)
FoxPro (4)
GIT (1)
Javascript (3)
Node JS, Angular (1)
php (1)
vue (2)
PymePro (10)
Bancos (2)
Facturacion (2)
Otros Ingresos (1)
PymePro Inventario (2)
Quedans (1)

Información Redes sociales

 ventas@tiservicios.net
 +503 25344838
    
    
 +503 79898203

También podría gustarte