Parsear XML


([N4] gontorre) #1

Buenos días

Necesito leer un xml para introducir un pedido en mi sistema. El XML es sencillo, os pongo un ejemplo:

<Order>
<ClientCode>028529</ClientCode>
<PasswordCli>XXXXXXXX</PasswordCli>
<OrderCode>12345</OrderCode>
<Date>2014-02-23</Date>
<Address>
<Name>Luis Perez</Name>
<Contact>Luis Perez</Contact>
<Phone>999999999</Phone>
<Email />
<Street>calle</Street>
<PC>00000</PC>
<City>MOSTOLES</City>
<State>MADRID</State>
<Country>ES</Country>
</Address>
<Comment>Comentario sobre el transporte o aviso o lo que sea</Comment>_
<Products>
<Item num="“1"”>
<ItemCode>IET0711C</ItemCode>
<PartNumber>C9459A</PartNumber>
<Price>27,11</Price>
<Units>2</Units>
</Item>
<Item num="“2"”>
<ItemCode>IET0712C</ItemCode>
<PartNumber>GV-N630-2GI</PartNumber>
<Price>42,93</Price>
<Units>1</Units>
</Item>
</Products>
</Order>

Os adelanto que no tengo ni idea de javascript ni del API del Velneo y, como siempre, lo necesito para ayer. ¿Cual os parece la mejor manera de atacar el problema? He leido que vTools tenía un parseador de XML pero en la versión que yo tengo no aparece.

Gracias y un saludo


([N3] pacosatu) #2

Hola Gonzalo.

Si conoces la estructura de Datos del XML, como parece que es el caso, y no quieres complicarte con javascript y el API, lo mejor es hacerlo con código nativo de Velneo.

Las vTools que citas pasaron a llamarse vUtiles y seguramente solo están disponibles si las solicitas expresamente a Velneo.

Dispone de funciones de parseo muy elementales, pero efectivas 100% en este caso.

Cualquier duda o atasco, ya sabes.

Saludos
Paco Satué


([N4] Infortic) #3

Las funciones a las que se refiere Paco son muy sencillas de utilizar, no creo que vayas a tener ningún problema.

Para que tengas un esquema debe de ser algo parecido a:

Set ( NODO, fun:XML_GETCHILDNODE@BAS_ImportExportJS_app.app(FICHERO, "Order",1) )
Set ( CAMPO1, fun:XML_GETATTRIBUTE@BAS_ImportExportJS_app.app(NODO, "ClientCode") )
Set ( CAMPO2, fun:XML_GETATTRIBUTE@BAS_ImportExportJS_app.app(NODO, "PasswordCli") )
Set ( CAMPO3, fun:XML_GETATTRIBUTE@BAS_ImportExportJS_app.app(NODO, "OrderCode") )
Libre
Libre
Rem ( <------ Código que lee todos los atributos )
Libre
Rem ( <---------Codigo que crea la cabecera )
Libre
Libre
Set ( NODO_LINEAS, fun:XML_GETCHILDNODE@BAS_ImportExportJS_app.app(FICHERO, "Products",1) )
Set ( NLINEAS, fun:XML_NCHILDNODE@BAS_ImportExportJS_app.app(NODO_LINEAS, "Item") )
For ( BUCLE, 1, (BUCLE<(NLINEAS+1)) & (BUCLE<10), 1 )
  Set ( NODO_LINEA, fun:XML_GETCHILDNODE@BAS_ImportExportJS_app.app(NODO_LINEAS, "Item",BUCLE) )
  Set ( CAMPO_LIN1, fun:XML_GETATTRIBUTE@BAS_ImportExportJS_app.app(NODO_LINEA, "ItemCode") )
  Set ( CAMPO_LIN2, fun:XML_GETATTRIBUTE@BAS_ImportExportJS_app.app(NODO_LINEA, "PartNumber") )
  Set ( CAMPO_LIN3, fun:XML_GETATTRIBUTE@BAS_ImportExportJS_app.app(NODO_LINEA, "Price") )
  Libre
  Libre
  Rem ( <------ Código que lee todos los atributos )
  Libre
  Rem ( <---------Codigo que crea la linea )
1

IMPORT_XML.pdf (17.5 KB)


([N4] gontorre) #4

Muchas gracias a los dos.

He pedido en soporte el vUtiles a ver si me lo mandan. De momento me he hecho las funciones para recorrer el XML y por lo que intuyo en el código de infortic he hecho algo similar a lo que hace vUtiles.

Un saludo