18 de septiembre de 2001

Crea documentos XML anidados con VFP 7.0

LOCAL StringXML,StringXML2

***********************************************
* Aquí se crea un documento básico en XML que  contiene
* tres datos personales y un TAG vacío para las direcciones
***********************************************

StringXML=[]
StringXML = CreateDocumentXML(StringXML,"nombre","Aleix")
StringXML = CreateDocumentXML(StringXML,"apellidos","Lamela")
StringXML = CreateDocumentXML(StringXML,"dni","12345678A")
StringXML = CreateDocumentXML(StringXML,"detallesDirecciones")

***********************************************
* Ahora crearemos las direcciones de la misma manera
***********************************************

StringXML2=[]
StringXML2 = CreateDocumentXML(StringXML2,"Calle","Diagonal")
StringXML2 = CreateDocumentXML(StringXML2,"Piso","4")
StringXML2 = CreateDocumentXML(StringXML2,"Puerta","1")

***********************************************
* Aqui vamos a agregar Documento XML a otro donde nos interese.
***********************************************

LOCAL PadreXML  as msxml2.DOMDocument
LOCAL HijosXML  as msxml2.DOMDocument
LOCAL ELEMENTOS  AS MSXML2.IXMLDOMElement 
PadreXML =  CREATEOBJECT("msxml2.domdocument")
HijosXML  =  CREATEOBJECT("msxml2.domdocument")
HijosXML.async=.f.
PadreXML.async=.f.
HijosXML.loadXML(StringXML2)
PadreXML.loadXML(StringXML)
HijosXML.documentElement 
PadreXML.documentElement.selectSingleNode("detallesDirecciones").appendChild(HijosXML.documentElement)


************************************************
* Y ya esta , ahora solo tienes que mirar el contenido
***********************************************


IF MESSAGEBOX("¿Desea guardar el contenido en disco?",32+4) = 6
    PadreXML.save("c:DocumentoPersonal.xml")
ELSE
    MESSAGEBOX(PadreXML.xml)
ENDIF

RETURN

***********************************************
* Esta función Acepta Tres Parámetros, un Documento Raíz 
* , el Nuevo TAG que se le quiere agregar
* Y el Valor del Tag
***********************************************

FUNCTION CreateDocumentXML(DocumentRoot  as String,;
                                           NewElement  as String, ;
                                           NewValue  as String)
 LOCAL ElDocumento  as MSXML2.DOMDocument 
 LOCAL ELElemento  as MSXML2.IXMLDOMElement 
 LOCAL LaRaiz  as MSXML2.IXMLDOMElement 
 IF PCOUNT() >= 1  THEN 

 ***********************************************
 * Cargo el Documento nuevo
 ***********************************************

 ElDocumento =  CREATEOBJECT("MSXML2.DOMDocument")
 ElDocumento.async= .F.
 ElDocumento.loadXML(DocumentRoot)
 ENDIF
 IF PCOUNT() >= 2  THEN 

 ***********************************************
 * Extraigo los datos principales
 ***********************************************
 LaRaiz = ElDocumento.documentElement 
 ***********************************************
 * Creo el nuevo Elemento
 ***********************************************
 ElElemento = ElDocumento.createElement(NewElement)
 LaRaiz.appendChild(ElElemento)
 ENDIF
 IF PCOUNT()=3  THEN
 LaRaiz.lastChild.text = NewValue
 ENDIF

 RETURN ElDocumento.xml 
ENDFUNC

2 comentarios :

  1. Estimado Luis Maria. podrias validar el funcionamiento en VFP9. Me sale un error en la linea
    LaRaiz = ElDocumento.documentElement

    ResponderBorrar
  2. Buenas a todos,
    me sale el error:
    "LaRaiz no es un objeto",
    en la linea:
    LaRaiz.appendChild(ElElemento)
    agradecido por una pronta y positiva respuesta
    AMedina

    ResponderBorrar

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.