Altova MapForce 2024 Professional Edition

Con este ejemplo aprenderá a combinar datos de dos estructuras XML de forma condicional y con ayuda de un componente de combinación. La asignación utilizada para el ejemplo está en esta ruta de acceso: <Documentos>\Altova\MapForce2024\MapForceExamples\Tutorial\JoinPeopleInfo.mfd.

 

El objetivo de esta asignación es recopilar en un archivo XML de destino datos personales (nombre, apellido, dirección postal, dirección de correo electrónico y teléfono) procedentes de dos archivos XML de origen.

 

El primer archivo XML de origen contiene el nombre y apellido de cada persona, así como su dirección de correo electrónico y teléfono (observe que para simplificar se han omitido la declaración XML, los espacios de nombres y algunos registros):

 

<People>
  <Person>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <Email>m.bailey@nanonull.com</Email>
    <Phone>555323698</Phone>
  </Person>
  <Person>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <Email>t.rea@nanonull.com</Email>
    <Phone>555598653</Phone>
  </Person>  
</People>

People.xml

El segundo archivo XML de origen contiene el nombre y apellido de cada persona, así como su dirección postal:

 

<Addresses>
  <Address>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <City>Bridgedell</City>
    <Street>Olive Street</Street>
    <Number>4</Number>
  </Address>
  <Address>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <City>Roseford</City>
    <Street>Evergreen Lane</Street>
    <Number>34</Number>
  </Address>
</Addresses>

Addresses.xml

El objetivo de la asignación es combinar la información de <Person> del primer archivo con la información de <Address> del segundo archivo, siempre y cuando coincidan el nombre y el apellido. Concretamente, por cada <Person> del primer archivo y por cada <Address> del segundo archivo, deben compararse FirstName y LastName. Si tienen valores idénticos, entonces los registros <Person> y <Address> correspondientes se refieren a la misma persona y se deben combinar. La estructura XML de destino tendría este aspecto:

 

<PeopleInfo>
  <Row>
    <FirstName>Marquita</FirstName>
    <LastName>Bailey</LastName>
    <City>Bridgedell</City>
    <Street>Olive Street</Street>
    <Number>4</Number>
    <Email>m.bailey@nanonull.com</Email>
    <Phone>555323698</Phone>
  </Row>
  <Row>
    <FirstName>Totie</FirstName>
    <LastName>Rea</LastName>
    <City>Roseford</City>
    <Street>Evergreen Lane</Street>
    <Number>34</Number>
    <Email>t.rea@nanonull.com</Email>
    <Phone>555598653</Phone>
  </Row>  
</PeopleInfo>

PeopleInfo.xml

Esto se consigue fácilmente añadiendo un componente de combinación a la asignación. Recuerde que puede conseguir el mismo resultado usando otro tipo de componente, pero en este ejemplo usaremos un componente de combinación.

 

Paso nº1: agregar los archivos XML de origen en la asignación

1.En el menú Insertar haga clic en el comando Archivo o esquema XML y navegue hasta este archivo de origen: <Documentos>\Altova\MapForce2024\MapForceExamples\Tutorial\People.xml.

2.Repita el paso anterior e inserte este archivo <Documentos>\Altova\MapForce2024\MapForceExamples\Tutorial\Addresses.xml.

 

Paso nº2: agregar el archivo de esquema de destino en la asignación

1.En el menú Insertar haga clic en el comando Archivo o esquema XML y navegue hasta este archivo: <Documentos>\Altova\MapForce2024\MapForceExamples\Tutorial\PeopleInfo.xsd (el archivo de esquema de destino).

2.Cuando la aplicación solicite un archivo XML de muestra, haga clic en Omitir.

3.Cuando la aplicación solicite un elemento raíz, seleccione PeopleInfo como elemento raíz.

 

Paso nº3: agregar el componente de combinación

1.En el menú Insertar haga clic en el comando Combinación (o haga clic en el botón Combinación mf_ic_join_button de la barra de herramientas). Llegados a este punto la asignación debería tener este aspecto (deberá arrastrar los componentes y ajustar su tamaño para conseguir este diseño):

mf_map_JoinPeopleInfo1

Fíjese en la estructura del componente de combinación. Tiene dos entradas nodes/rows para que podamos conectarlo a las dos estructuras que deseamos comparar (las estructuras Person y Address en este caso).

 

2.Dibuje una conexión entre Person y la primera entrada nodes/rows del componente de combinación. Igualmente, conecte Address con la otra entrada nodes/rows.

mf_map_JoinPeopleInfo2

3.Como dijimos anteriormente, la combinación sólo debería tener lugar si FirstName y LastName tienen valores idénticos en ambas estructuras. Para definir esta condición haga clic en el botón Definir condición de combinación mf_ic_join_key del componente.

4.Seleccione el par de elementos que definen la primera condición de combinación (FirstName en Estructura 1 y FirstName en Estructura 2).

5.Haga clic en Agregar condición y repita el paso anterior con LastName esta vez.

mf_map_JoinPeopleInfo3

 

En algunas asignaciones puede ser suficiente una condición formada por una comparación. Sin embargo, en este ejemplo es importante crear dos comparaciones:

 

1)FirstName en Estructura 1 = FirstName en Estructura 2

2)LastName en Estructura 1 = LastName en Estructura 2.

 

Cuando se definen varias condiciones, todas ellas deben cumplirse. De lo contrario no tiene lugar la combinación. Por tanto, en este ejemplo, la combinación sólo tendrá lugar si las dos comparaciones dan como resultado true. Si, por el contrario, sólo se definiera una comparación, podrían combinarse los datos de personas que tienen el mismo nombre pero distinto apellido.

 

Paso nº4: asignar el componente de combinación al esquema de destino

Ahora que se combinaron las dos estructuras, ya puede definir qué elementos de la estructura combinada se deben asignar al componente de destino. Esto se hace creando conexiones entre los elementos de la estructura combinada y los del componente de destino (imagen siguiente). La conexión que une joined con Row tiene este propósito: cuando se cumpla la condición de combinación, se crea un elemento Row nuevo en el componente de destino.

mf_map_JoinPeopleInfo

Para consultar una vista previa de los resultados de la asignación abra el panel Resultados. Como se esperaba, ahora los registros de las personas (<Row>) incluyen también la dirección postal.

© 2018-2024 Altova GmbH