Como leer la
información de un archivo XML con XML Parser
Por Toni Planas
http://www.fpress.com/
msxml.zip
Visual Foxpro desde su versión 7 incluye una serie de
funciones relacionadas con XML, pero el objetivo es este documento es
proporcionar al lector otro método para leer información en formato XML sin las
limitaciones de las funciones que proporciona Visual Foxpro.
Cuando intente utilizar XMLTOCURSOR() para recuperar
información en formato XML me di cuenta que solo podía leer el primer nivel
dentro de la jerarquía, el resto de niveles XMLTOCURSOR() intenta colocarlos en
un campo memo sin conseguirlo del todo, también comprobé que no podía recuperar los atributos de las
etiquetas XML .
MSXML Parser es una DLL que Microsoft empezó a
distribuir con Internet Explorer 5, la última versión de esta DLL es la 4.0, se
puede descargar de la web de Microsoft.
Veamos como leer todos los niveles de un archivo XML
con sus atributos. Para ello utilizaremos un archivo XML que contiene
información sobre CDs de música (Género, Tipo de intérprete, Intérprete,
Título, Número de temas del CD y lista de temas con su duración en minutos) algunos de estos datos son atributos de
algún nodo (Género, Tipo de intérprete, Número de temas y duración del tema) el
resto es información contenida en el propio nodo.
Los archivos utilizados en el ejemplo son cds.xsd, archivo de esquema, cds.xml, archivo de datos.
CDs.XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="CDs">
<xs:annotation>
<xs:documentation>Compact Disc</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="CD" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="Artista">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Tipo" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Titulo">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string"/>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Temas">
<xs:complexType>
<xs:sequence>
<xs:element name="Tema" maxOccurs="unbounded">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="Duracion" type="xs:string" use="required"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>