FoxPress – Abril 2003

 

      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>