Delphi - XML Mapper // Problema interpretar XML // Dephi 7

 
Vista:
sin imagen de perfil

XML Mapper // Problema interpretar XML // Dephi 7

Publicado por Roberto (4 intervenciones) el 13/09/2017 13:26:03
buenos días,
Estoy intentando desde delphi 7 tomar los datos de un XML.
Para ello utilizo la herramienta que trae integrada XML Mapper, la cual toma el xml y lo convierte a datapacket con el fin de utilizarlo con un dataset y tomar los datos.

El Mapper funciona bien con XML que encontrado en la web, pero no con los que se generan en mi sistema.

Adjuntos las capturas de pantalla y los XML a ver si me pueden orientar a donde esta el problema.

Quizás haya una forma mas fácil, esta es la que conozco.

gracias
1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

XML Mapper // Problema interpretar XML // Dephi 7

Publicado por E.T. (1244 intervenciones) el 13/09/2017 17:33:59
Lo puedes hacer a "pie" con el uso del componente TXMLDocument, o en combinación del TXMLDocument más el "Xml data binding" wizard, el cual te crea una interface para acceder de forma más sencilla a los datos de tu xml, en forma de un objeto.
https://www.youtube.com/watch?v=4D78MG4CaAI
En este video se muestra el uso del wizard, en este caso el programador usa un archivo "dtd" para la definición del xml, tu puedes hacerlo directamente con el xml, como fue que yo probé.
Ya que tengas la definición solo hay que cargar el xml que necesites y acceder a los datos:

1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.Button1Click(Sender: TObject);
var a: IXMLSolicitudType;//esta es la interface que genera el wizard
begin
  XMLDocument1.LoadFromFile('R-0029-00025881_MANZUR.xml');
  //XMLDocument1.Active := true;
  a := Getsolicitud(XMLDocument1);
  ShowMessage(a.Detalles[0].Producto.CodigoProducto);//aqui muestra el codigo del primer producto
  //a := (XMLDocument1.ChildNodes.FindNode('solicitud') as IXMLSolicitudType);
  //ShowMessage(XMLDocument1.ChildNodes.FindNode('solicitud').LocalName);
  XMLDocument1.Active := false;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

XML Mapper // Problema interpretar XML // Dephi 7

Publicado por Roberto (4 intervenciones) el 14/09/2017 13:48:54
buenos días,
me ha servido, he levantado los datos del xml, los voy a volcar a un SQL para trabajar con ellos.
Te molesto nuevamente, para generar el uses R002900025881_MANZUR; a través del XML Data Binding,
hay alguna forma de mostrarle la ruta de los XML y que los genere automáticamente los 10 uses que tiene cada carga
al crear el Form1.

saludos

2
1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

XML Mapper // Problema interpretar XML // Dephi 7

Publicado por E.T. (1244 intervenciones) el 14/09/2017 18:07:06
Que tal, la unit generada te sirve para todos los xml, pues tienen la misma estructura. A menos que los xml tengan diferentes nodos y atributos, no es necesario hacer el binding para cada xml.
Solo cuando cargues el xml cambia el archivo que necesitas usar
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.Button1Click(Sender: TObject);
 
var a: IXMLSolicitudType;//esta es la interface que genera el wizard
begin
  XMLDocument1.LoadFromFile('R-0029-00025881_MANZUR.xml');//<-------------------AQUI CAMBIAS EL ARCHIVO A USAR
  //XMLDocument1.Active := true;
  a := Getsolicitud(XMLDocument1);
  ShowMessage(a.Detalles[0].Producto.CodigoProducto);//aqui muestra el codigo del primer producto
  //a := (XMLDocument1.ChildNodes.FindNode('solicitud') as IXMLSolicitudType);
  //ShowMessage(XMLDocument1.ChildNodes.FindNode('solicitud').LocalName);
  XMLDocument1.Active := false;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

XML Mapper // Problema interpretar XML // Dephi 7

Publicado por Roberto (4 intervenciones) el 14/09/2017 18:20:54
Buenas, si cambia la cantidad de nodos, la pregunta especifica es si se puede hacer el binding por comando y no hacer el wizzard mas que nada para el usuario final.

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

XML Mapper // Problema interpretar XML // Dephi 7

Publicado por E.T. (1244 intervenciones) el 14/09/2017 19:50:14
Los estoy checando, cambia la cantidad de nodos detalle, pero la estructura base es la misma, tu puedes usar un "for" para acceder a todos los detalles. Pero atendiendo a la pregunta, no se realmente, pero el binding se hace en tiempo de diseño y no en tiempo de ejecución del programa, por lo tanto el usario final no podria hacer uso de un binding pues no estaría integrado en el ejecutable, ya que el cliente final no podria compilar la nueva unidad que genera, si es que es posible hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar