BitcodeSoft Plugin XMLparser Velneo 7.x Versión 1.0.1
Contenido Instalación... 3 XMLparser flags... 4 Referencia API Plugin XMLparser... 6 Ejemplos de uso... 28 2
Instalación Con instalador 1. Ejecute el instalador proporcionado, en la carpeta de instalación podrá encontrar el archivo XMLparser.DLL, dentro de la carpeta V7 tiene la documentación del plugin para la V7.y el vin para ser instalado con vinstallbuilder. 2. Instale el vin proporcionado. 3. En la carpeta Redist encontrará el archivo vcredist_x86, es el archivo de instalación del Microsoft Visual C++ 2010 x86 redistributable, no tiene que instalarlo el instalador lo hace por usted, pero deberá instalarlo en los PC s de los clientes en los que instale su software con la librería XMLparser, para instalar el runtime en modo silencioso ejecute el siguiente comando: vcredist_x86.exe /q /norestart 3
XMLparser flags PR_DOCFLAGS Flags Documento dll:xmlparser_dll.pr_docflags@xmlparser.app(flags) const char* flags Cadena de texto descripción flags Int con el valor requerido Valores permitidos para el parámetro flags: UTF16LEFILE UTF8PREAMBLE IGNORECASE READFILE WRITEFILE APPENDFILE UTF16BEFILE TRIMWHITESPACE COLLAPSEWHITESPACE Ejemplos: Codificación UTF-16LE (BOM siempre incluido)* UTF-8 con BOM* Lo métodos por defecto distinguen entre mayúsculas y minúsculas, con esta opción se ignora este comportamiento. Modo lectura Modo escritura Añade al final del archivo Codificación UTF-16BE (BOM siempre incluido)* Elimina espacio inicial y final del contenido de los elementos o atributos Incluye: Espacios, Tabs, retornos y nueva línea. Elimina espacio inicial y final y sustituye los espacios entre cadenas por un único espacio, incluidos retornos y nueva línea. PR_SETDOCFLAGS( PR_DOCFLAGS( UTF8PREAMBLE )) PR_SETDOCFLAGS ( PR_DOCFLAGS ( UTF8PREAMBLE TRIMWHITESPACE )) PR_NTFFLAGS Flags Tipo de nodo dll:xmlparser_dll.pr_ntfflags@xmlparser.app(flags) const char* flags Cadena de texto descripción flags Int con el valor requerido 4
Valores permitidos para el parámetro flags: ELEMENT <CLIENTE>Manuel</CLIENTE> TEXT Manuel WHITESPACE CDATA_SECTION <![CDATA[datos]]> PROCESSING_INSTRUCTION <?xml version="1.0" encoding="utf-8"?> COMMENT <!-- COMENTARIO --> DOCUMENT_TYPE <!DOCTYPE rootelement> EXCLUDE_WHITESPACE Excluir espacios en blanco LONE_END_TAG </CLIENTE> Ejemplos: PR_FINDNODE( PR_NTFFLAGS( CDATA_SECTION ) ) PR_ADDNODE(PR_NTFFLAGS ( PROCESSING_INSTRUCTION, "xml version=\c1.0\c encoding=\cutf-8\c") PR_NFFLAGS Flags nodos dll:xmlparser_dll.pr_nfflags@xmlparser.app(flags) const char* flags Cadena de texto descripción flags Int con el valor requerido WITHCDATA Codifica el valor de los datos como una sección CDATA WITHNOLINES Añade los elementos sin retorno de línea WITHXHTMLSPACE Poner un espacio antes de la barra en la etiqueta del elemento vacío (por ejemplo, <br />) WITHREFS pr_addelemstr( "C", "国", pr_nfflags( WITHREFS ) Resultado : <C>国 </C> Resultado sin WITHREFS <C>国</C> WITHNOEND Crea un elemento sin su etiqueta de cierre ESCAPEQUOTES Previsto para proximas versiones. NONENDED Posible Retorno de pr_getdocflags(), error ILLDATA Posible Retorno de pr_getdocflags(), error * (Byte Order Mark) 5
Referencia API Plugin XMLparser PR_R Registro DLL, el nombre y la clave son proporcionadas en el proceso de compra del pluggin. Importante: un registro erróneo, o utilizar la DLL sin la llamada a esta función provocará la salida de su aplicación Velneo. dll:xmlparser_dll.pr_r@xmlparser.app(name,key) const char* name const char* key Nombre licencia Clave registro 1 Registro corecto 0 Registtro incorecto PR_CREATE Crea el manejador del objeto XML, la variable que reciba el resultado de llamar esta función tiene que ser de tipo numérica. El manejador se deberá pasar como primer parámetro en las funciones del parseador XML. dll:xmlparser_dll.pr_create@xmlparser.app() No tiene Manejador objeto XML 0 no se ha podido crear el manejador 6
PR_DESTROY Elimina el manejador del objeto XML y librera memoria. Esta función se deberá llamar siempre que se termine el trabajo con el parseador. dll:xmlparser_dll.pr_destroy@xmlparser.app(parser) No tiene PR_LOAD Carga el XML de un archivo y lo analiza dll:xmlparser_dll.pr_load@xmlparser.app(parser,file) const char* file Nombre fichero a cargar 1 XML cargado 0 El fichero no se cargó PR_SETDOC Carga el XML de una cadena y se analiza dll:xmlparser_dll.pr_setdoc@xmlparser.app(parser, doc) const char* doc Documento en formato XML 1 XML cargado 0 El documento no se cargó 7
PR_GETDOC Devuelve el documento completo como una cadena dll:xmlparser_dll.pr_getdoc@xmlparser.app(parser) Const char* PR_SAVE Guarda el documento XML en un archivo dll:xmlparser_dll.pr_save@xmlparser.app(parser,file) const char* szfilename Nombre del fichero 1 XML guardado 0 Error al guardar el documento PR_FINDELEM Localiza siguiente elemento, opcionalmente se puede poner nombre de la etiqueta o la ruta dll:xmlparser_dll.pr_findelem@xmlparser.app(parser,szname) const char* szname Nombre de la etiqueta o ruta opcional 1 Éxito en localización 0 No se ha localizado el elemento PR_FINDCHILELEM Localiza el próximo hijo comparando etiquetas, nombre del elemento o la ruta 8
dll:xmlparser_dll.pr_findchildelem@xmlparser.app(parser,szname) const char* szname Nombre de la etiqueta o ruta opcional 1 Éxito en localización 0 No se ha localizado el elemento PR_FINDNODE Localiza el próximo nodo dll:xmlparser_dll.pr_findnode@xmlparser.app(parser,ntype) int ntype Tipo de nodo (ver flags nodos) 1 Éxito en localización 0 No se ha localizado el nodo PR_INTOELEM Entrar en elemento actual dll:xmlparser_dll.pr_intoelem@xmlparser.app(parser) 1 Éxito 0 No se ha situado en el nodo 9
PR_OUTOFELEM Salir de elemento actual dll:xmlparser_dll.pr_outofelem@xmlparser.app(parser) 1 Éxito 0 No se ha salido del elemento en curso PR_RESETPOS Restablece la posición actual hasta el principio del documento. dll:xmlparser_dll.pr_resetpos@xmlparser.app(parser) No tiene PR_RESETMAINPOS Restablece la posición actual principal antes del primer hermano dll:xmlparser_dll.pr_resetmainpos@xmlparser.app(parser) No tiene 10
PR_RESETCHILDPOS Restablece la posición actual del nodo hijo antes de iniciar el primer nodo hijo dll:xmlparser_dll.pr_resetchildpos@xmlparser.app(parser) No tiene PR_ADDELEMSTR Agrega un elemento después del elemento principal de la posición actual o hermano creado por última vez dll:xmlparser_dll.pr_addelemstr@xmlparser.app(parser,szname, szdata,nflags) const char* szname Const char* szdata Int nflags Nombre del elemento Datos Flags (ver flags de nodos) 1 El elento se ha añadido corectamente 0 No se ha podido añadir elemento PR_ADDELEMINT Agrega un elemento después del elemento principal de la posición actual o hermano creado por última vez dll:xmlparser_dll.pr_addelemint@xmlparser.app(parser,szname, nvalue,nflags) const char* szname int nvalue Int nflags Nombre del elemento Valor Flags (ver flags de nodos) 1 El elento se ha añadido corectamente 0 No se ha podido añadir elemento 11
PR_ INSERTELEMSTR Inserta un elemento antes de la posición actual dll:xmlparser_dll.pr_insertelemstr@xmlparser.app(parser,szname, szdata,nflags) const char* szname Const char* szdata Int nflags Nombre del elemento Datos Flags (ver flags de nodos) 1 El elento se ha insertado corectamente 0 No se ha podido insertar elemento PR_ INSERTELEMINT Inserta un elemento antes de la posición actual dll:xmlparser_dll.pr_insertelemint@xmlparser.app(parser,szname, nvalue,nflags) const char* szname int nvalue Int nflags Nombre del elemento Valor Flags (ver flags de nodos) 1 El elento se ha insertado corectamente 0 No se ha podido insertar elemento PR_ ADDCHILDELEMSTR Agrega un elemento después del elemento secundario en posición actual o último nodo hijo dll:xmlparser_dll.pr_addchildelemstr@xmlparser.app(parser,szname, szdata,nflags) const char* szname Const char* szdata Int nflags Nombre del elemento Datos Flags (ver flags de nodos) 1 El elento se ha agregado corectamente 0 No se ha podido agregar elemento 12
PR_ ADDCHILDELEMINT Agrega un elemento después del elemento secundario en posición actual o último nodo hijo dll:xmlparser_dll.pr_addchildelemint@xmlparser.app(parser,szname, nvalue,nflags) const char* szname int nvalue Int nflags Nombre del elemento Datos Flags (ver flags de nodos) 1 El elento se ha agregado corectamente 0 No se ha podido agregar elemento PR_ INSERTCHILDELEMSTR Inserta un elemento antes del elemento secundario de la posición actual o primer hijo dll:xmlparser_dll.pr_insertchildelemstr@xmlparser.app(parser,szname, szdata,nflags) const char* szname Const char* szdata Int nflags Nombre del elemento Datos Flags (ver flags de nodos) 1 El elento se ha insertado corectamente 0 No se ha podido insertar elemento PR_ INSERTCHILDELEMINT Inserta un elemento antes del elemento secundario de la posición actual o primer hijo dll:xmlparser_dll.pr_insertchildelemint@xmlparser.app(parser,szname, nvalue,nflags) const char* szname int nvalue Int nflags Nombre del elemento Datos Flags (ver flags de nodos) 1 El elento se ha insertado corectamente 0 No se ha podido insertar elemento 13
PR_ ADDSUBDOC Agrega un subdocumento ( cadena XML) después del elemento principal, de la posición actual o nodo hermano creado por última vez dll:xmlparser_dll.pr_addsubdoc@xmlparser.app(parser,szsubdoc) const char* szsubdoc Subdocumento en formato XML 1 Subdocumento agregado 0 No se ha podido agregar subdocumento PR_ INSERTSUBDOC Inserta un subdocumento ( cadena XML) antes del elemento principal, de la posición actual o el primer nodo hermano dll:xmlparser_dll.pr_insertsubdoc@xmlparser.app(parser,szsubdoc) const char* szsubdoc Subdocumento en formato XML 1 Subdocumento insertado 0 No se ha podido insertar subdocumento PR_ ADDCHILDSUBDOC Agrega un subdocumento después del elemento secundario, posición actual o último nodo hijo dll:xmlparser_dll.pr_addchildsubdoc@xmlparser.app(parser,szsubdoc) const char* szsubdoc Subdocumento en formato XML 1 Subdocumento agregado 0 No se ha podido agregar subdocumento PR_ INSERTCHILDSUBDOC 14
Inserta un subdocumento antes del elemento secundario en posición actual o primer nodo hijo dll:xmlparser_dll.pr_insertchildsubdoc@xmlparser.app(parser,szsubdoc) const char* szsubdoc Subdocumento en formato XML 1 Subdocumento insertado 0 No se ha podido insertar subdocumento PR_ ADDNODE Agrega un nodo después del nodo actual o al final del contenido del elemento padre dll:xmlparser_dll.pr_addnode@xmlparser.app(parser, ntype, sztext) Int ntype const char* sztext Tipo del nodo( ver flags tipo de nodo) Contenido del nodo 1 Nodo agregado 0 No se ha podido agregar el enodo Ejemplo: dll:xmlparser_dll.pr_addnode@xmlparser.app(parser,dll:xmlparser_dll.pr_ntflags@xmlparser.app( ELEMENT ), <CLIENTE>Manuel</CLIENTE> ) PR_ INSERTNODE inserta un nodo antes del nodo actual o al principio del contenido del elemento padre dll:xmlparser_dll.pr_insertnode@xmlparser.app(parser, ntype, sztext) Int ntype const char* sztext Tipo del nodo( ver flags tipo de nodo) Contenido del nodo 1 Nodo insertado 0 No se ha podido insertar el nodo PR_ REMOVEELEM 15
Quita el elemento actual dll:xmlparser_dll.pr_removeelem@xmlparser.app(parser) 1 Elemento quitado 0 No se ha podido quitar el emento PR_ REMOVECHILDELEM Quita el elemento secundario de posición actual, incluyendo sus elementos secundarios dll:xmlparser_dll.pr_removechildelem@xmlparser.app(parser) 1 Elemento quitado 0 No se ha podido quitar el emento PR_ REMOVENODE Quita el nodo actual dll:xmlparser_dll.pr_removenode@xmlparser.app(parser) 1 Nodo quitado 0 No se ha podido quitar el nodo PR_ GETDATA Devuelve la cadena de valor del elemento actual en la posición principal o nodo 16
dll:xmlparser_dll.pr_getdata@xmlparser.app(parser) Cadena de texto con el valor obtenido del elemento Ejemplo: <caption content><![cdata[<b>recopilatorios</b>]] /></caption> La cadena obtenida por PR_GETDATA sería RECOPILATORIOS PR_ GETCHILDDATA Devuelve la cadena de valor del elemento secundario en la posición actual dll:xmlparser_dll.pr_getchilddata@xmlparser.app(parser) Cadena de texto con el valor obtenido del elemento PR_ GETELEMCONTENT Devuelve la cadena del contenido del elemento de la posición actual,incluyendo los elementos secundarios dll:xmlparser_dll.pr_getelemcontent@xmlparser.app(parser) Cadena de texto con el valor obtenido del elemento Ejemplo: <config> 17
<diagnostico d="3"> <fichero>c:\temp\a.txt</fichero> </diagnostico> <diagnostico d="7"> <fichero>d:\temp\b.txt</fichero> <interno pordefecto="si"/> </diagnostico> </config> PR_FINDELEM( "/config/diagnostico[2]" ); PR_GETELEMENTCONTENT(); Este código localiza el segundo elemento diagnostico y PR_GETELEMENTCONTENT() devuelve el siguiente fragmento XML: <fichero>d:\temp\b.txt</fichero> <interno pordefecto="si"/> PR_ GETSUBDOC Devuelve la cadena en formato XML del subdocumento del elemento en la posición actual, incluyendo los elementos secundarios dll:xmlparser_dll.pr_getsubdoc@xmlparser.app(parser) Cadena de texto con el subdocumento XML obtenido PR_ GETCHILDSUBDOC Devuelve la cadena del subdocumento del elemento secundario en la posición actual dll:xmlparser_dll.pr_getchildsubdoc@xmlparser.app(parser) Cadena de texto con el subdocumento XML obtenido PR_ GETATTRIB 18
Devuelve el valor de la cadena del atributo con el nombre indicado en el parámetro szattrib dll:xmlparser_dll.pr_getattrib@xmlparser.app(parserszattrib) Const char* szattrib Nombre del atributo Cadena de texto con el valor del atributo PR_ GETCHILDATTRIB Devuelve la cadena de valor del atributo especificado del elemento hijo dll:xmlparser_dll.pr_getchildattrib@xmlparser.app(parserszattrib) Const char* szattrib Nombre del atributo Cadena de texto con el valor del atributo PR_ GETTAGNAME Devuelve el nombre de la etiqueta del elemento actual dll:xmlparser_dll.pr_gettagname@xmlparser.app(parser) Cadena de texto con el nombre de la etiqueta PR_ GETCHILDTAGNAME 19
Devuelve el nombre de la etiqueta del nodo hijo dll:xmlparser_dll.pr_getchildtagname@xmlparser.app(parser) Cadena de texto con el nombre de la etiqueta PR_ GETATTRIBNAME Devuelve el nombre del atributo especificado por el número n del elemento actual dll:xmlparser_dll.pr_getattribname@xmlparser.app(parser,n) int n Posición del atributo empieza en posición 0 Cadena con el nombre del atributo, si no existe atributo en la posición indicada devuelve cadena vacia PR_ GETNODETYPE Devuelve el tipo de nodo del nodo actual. dll:xmlparser_dll.pr_getnodetype@xmlparser.app(parser) int con tipo de nodo Posibles valores de retorno: ELEMENT <CLIENTE>Manuel</CLIENTE> TEXT Manuel WHITESPACE CDATA_SECTION <![CDATA[datos]]> PROCESSING_INSTRUCTION <?xml version="1.0" encoding="utf-8"?> COMMENT <!-- COMENTARIO --> DOCUMENT_TYPE <!DOCTYPE rootelement> LONE_END_TAG </CLIENTE> 20
Ejemplo: If( dll:xmlparser_dll.pr_getnodetype@xmlparser.app(parser)= dll:xmlparser_dll.pr_ntfflags@xmlparser.app( CDATA_SECTION )) PR_ SETDATASTR Establece el valor del elemento en la posición actual o nodo dll:xmlparser_dll.pr_setdatastr@xmlparser.app(parser, szdata, nflags) Const char* szdata Valor que se quiere establecer Int nflags Flags elemento, por defecto 0 1 valor establecido 0 no se podido estab lecer el valor Ejemplo: PR_ADDELEM( "nota" ); PR_SETDATA( "Cita mañana a las 9:00", 0 ); Resultado: <nota>cita mañana a las 9:00</nota> PR_ SETCHILDDATASTR Establece el valor del elemento secundario en la posición actual dll:xmlparser_dll.pr_setchilddatastr@xmlparser.app(parser, szdata, nflags) Const char* szdata Valor que se quiere establecer Int nflags Flags elemento, por defecto 0 1 valor establecido 0 no se podido estab lecer el valor PR_ SETDATAINT 21
Establece el valor del elemento en la posición actual o nodo dll:xmlparser_dll.pr_setdatastr@xmlparser.app(parser, nvalue, nflags) int nvalue Valor numérico que se quiere establecer Int nflags Flags elemento, por defecto 0 1 valor establecido 0 no se podido estab lecer el valor Ejemplo: PR_ADDELEM( "nota" ); PR_SETDATA( "Cita mañana a las 9:00", 0 ); Resultado: <nota>cita mañana a las 9:00</nota> PR_ SETCHILDDATAINT Establece el valor del elemento secundario en la posición actual dll:xmlparser_dll.pr_setchilddataint@xmlparser.app(parser, nvalue, nflags) int nvalue Valor numérico que se quiere establecer Int nflags Flags elemento, por defecto 0 1 valor establecido 0 no se podido estab lecer el valor PR_ SETELEMCONTENT Establece el contenido de la cadena en formato XML del elemento principal en la posición actual 22
dll:xmlparser_dll.pr_setdatastr@xmlparser.app(parser, szcontent) Const char* szcontent Contenido 1 Contenido establecido 0 No sea podido estab lecer el contenido PR_SETATTRIBSTR Establece el valor del atributo especificado del elemento principal en la posición actual dll:xmlparser_dll.pr_setattribstr@xmlparser.app(parser, szattrib, szvalue, nflags) const char* szattrib const char* szvalue int nflags Nonbre del atributo Valor del atributo Flags(ver flasgs nodos) 1 El atributo se ha añadido corectamente 0 No se ha podido añadir el atributo Ejemplo: PR_ADDLEM( "ROOT" ); PR_SETATTRIB( "codigo", 35 ); Resultado: <ROOT codigo="35"/> PR_SETCHILDATTRIBSTR Establece el valor del atributo específico del elemento secundario en posición actual 23
dll:xmlparser_dll.pr_setchildattribstr@xmlparser.app(parser, szattrib, szvalue, nflags) const char* szattrib const char* szvalue int nflags Nonbre del atributo Valor del atributo Flags(ver flasgs nodos) 1 El atributo se ha añadido corectamente 0 No se ha podido añadir el atributo PR_SETATTRIBINT Establece el valor del atributo especificado del elemento principal en la posición actual dll:xmlparser_dll.pr_setattribint@xmlparser.app(parser, szattrib, szvalue, nflags) const char* szattrib int szvalue int nflags Nonbre del atributo Valor numérico del atributo Flags(ver flasgs nodos) 1 El atributo se ha añadido corectamente 0 No se ha podido añadir el atributo Ejemplo: PR_ADDLEM( "ROOT" ); PR_SETATTRIBINT( "codigo", 35 ); Resultado: <ROOT codigo="35"/> PR_SETCHILDATTRIBINT Establece el valor del atributo específico del elemento secundario en posición actual 24
dll:xmlparser_dll.pr_setchildattribint@xmlparser.app(parser, szattrib, szvalue, nflags) const char* szattrib int szvalue int nflags Nonbre del atributo Valor numérico del atributo Flags(ver flasgs nodos) 1 El atributo se ha añadido corectamente 0 No se ha podido añadir el atributo PR_ISWELLFORMED Determina si el documento tiene un único elemento raíz y si la composición del documento XML es correcto. dll:xmlparser_dll.pr_iswellformed@xmlparser.app(parser) 1 XML correcto 0 XML mal formado PR_ESCAPETEXT Devuelve la cadena con los caracteres especiales codificados dll:xmlparser_dll.pr_escapetext@xmlparser.app(sztext, nflags) const char* sztext Int nflags Cadena con caracteres especiales Flags cadena(ver flags nodo) Cadena codificada Ejemplo: PR_ESCAPETEXT("Jack daniel's < 国",PR_NFFLAGS( MNF_ESCAPEQUOTES MNF_WITHREFS )) // resultado == "Jack daniel's < 国" PR_UNESCAPETEXT Devuelve la cadena con los caracteres especiales sin codificar. 25
dll:xmlparser_dll.pr_unescapetext@xmlparser.app(sztext, nflags) const char* sztext Int nflags Cadena con caracteres especiales Flags cadena(ver flags nodo) Cadena codificada Ejemplo: PR_UNESCAPETEXT("Jack daniel's < 国",PR_NFFLAGS( MNF_ESCAPEQUOTES MNF_WITHREFS )) // resultado == "Jack daniel's < 国" PR_ENCODEBASE64 Códifica cadena de texto a base64. dll:xmlparser_dll.pr_encodebase64@xmlparser.app(s) const unsigned char* s Cadena a codificar Cadena codificada en base64 PR_DECODEBASE64 Decodifica cadena en formato base64. dll:xmlparser_dll.pr_decodebase64@xmlparser.app(s) const unsigned char* s Cadena codificada en base64 Cadena decodificada PR_ENCODEFILEBASE64 Codifica archivo a base 64. 26
dll:xmlparser_dll.pr_encodefilebase64@xmlparser.app(file,dest) const char* file const char* dest Archivo a codificar Archivo destino codificado 1 Archivo creado 0 No se ha podido crear el archivo PR_DECODEFILEBASE64 Decodifica archivo en base64. dll:xmlparser_dll.pr_decodefilebase64@xmlparser.app(file,dest) const char* file const char* dest Archivo a codificado en base64 Archivo destino decodificado 1 Archivo creado 0 No se ha podido crear el archivo PR_FREEMEN Libera memoria utilizada en PR_ESCAPETEXT, PR_UNESCAPETEXT, ENCODEBASE64 Y DECODEBASE64. dll:xmlparser_dll.pr_freemen@xmlparser.app() No tiene No tiene 27
Ejemplos de uso Creación de un documento XML Para crear un documento XML, ejecute a la función PR_ADDELEM para crear el elemento raíz. En este punto, el documento simplemente contienen el elemento raíz vacío por ejemplo <ORDEN/>. A continuación, ejecute PR_INTOELEM para situarse dentro del elemento <ORDEN/> ahora usted puede crear elementos secundarios en el elemento raíz (es decir, el elemento raíz será el "contenedor" de los elementos secundarios). Examine el código de ejemplo siguiente: PARSER= PR_CREATE() PR_ADDELEM (PARSER,"Orden") PR_INTOELEM(PARSER) PR.ADDELEM(PARSER,"prod") PR_INTOELEM(PARSER) PR_ADDELEM (PARSER,"sn", "134567-j"); PR_ADDELEM (PARSER,"NOMBRE", "DVD remov"); PR_ADDELEM (PARSER,"Cantidad", "1"); Este código genera el siguiente código XML. La raíz es el elemento ORDEN: <Orden> <prod> <sn> 134567-j </sn> <NOMBRE> DVD remov </NOMBRE> <Cantidad > 1 </Cantidad> </prod> </orden> Usted puede guardar el documento de arriba en un archivo en disco ejecutando la función PR_SAVE: PR_SAVE("C:\\ejemplo.xml") Recuerde es importante destruir el manejador del objeto XML después de utilizarlo: PR_DESTROY(PARSER) Navegar por un documento XML Puede navegar por los datos del XML que se ha creado en el ejemplo anterior, sólo tenemos que llamar a PR_RESETPOS para ir al principio del documento. O usted puede cargar el archivo XML guardado: A partir de un archivo: PR_LOAD(PARSER, "C:\\ejemplo.xml") O de una cadena XML con PR_SETDOC : PR_SETDOC(PARSER,strXML) 28
En el siguiente ejemplo, nos situamos dentro del elemento raíz ORDEN y recorremos todos los elementos PROD con PR_FINELEM para obtener el número de serie y la cantidad de cada uno utilizamos PR_GETDATA. PARSER= PR_CREATE() PR_FINELEM(PARSER) // elemento raíz ORDEN PR_INTOELEM(PARSER)// dentro de ORDEN For(i, PR_FINELEM(PARSER,"prod"),1) { PR_INTOELEM(PARSER) PR_FINELEM(PARSER,"sn"); SET(SERIE,PR_GETDATA(PARSER)) PR_FINDELEM(PARSER,"Cantidad") SET(CANTIDAD,PR_GETDATA(PARSER)) PR_OUTOFELEM(PARSER); //dar de alta registro Velneo } PR_DESTROY(PARSER) Para cada elemento que se encuentra llamamos a PR_INTOELEM para obtener los valores de sus elementos secundarios, después llamamos a PR_OUTOFELEM. Tiene que comprobar que siempre exista un PR_OUTOFELEM para cada llamada a un PR_INTOELEM. Por supuesto puede crear tantos manejadores de objetos XML como estime necesario, tan solo recuerde librerar la memoria de los mismos utilizando la función PR_DESTROY. Importante: Los archivos XML se cargan en memoria, para liberar dicha memoria utilice la función PR_DESTROY 29