Actualizar nodos

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Acciones > Actualizar datos >

Actualizar nodos

Cuando se desencadena un evento, la acción Actualizar nodos actualiza los nodos especificados con el valor dado. Tanto el nodo como el valor de actualización se especifica por medio de una expresión XPath. En la imagen siguiente, el nodo de atributo @Updated del elemento de contexto XPath se actualiza con la fecha actual (el resultado de evaluar la función XPath current-date-no-TZ()).

MTDUpdateNode01

Hay varios aspectos que se deben tener en cuenta a la hora de especificar el nodo y los valores de actualización:

 

La importancia del nodo de contexto para las rutas de acceso relativas. (Detalles más abajo)
Al nodo de destino para la actualización se le puede hacer referencia con la variable $MT_TargetNode. (Detalles más abajo)
Si el nodo de origen es un elemento con contenido mixto (texto y elementos), entonces solamente se usa el contenido de texto del elemento de contenido mixto. El contenido de texto de los elementos descendientes se omite. (Detalles más abajo)
Se pueden especificar varios nodos de destino con una matriz. (Detalles más abajo)

 

Importancia del nodo de contexto para las rutas de acceso relativas

Si el nodo que se debe actualizar se especifica como ruta de acceso relativa, entonces se actualizan solamente los nodos que son descendientes del nodo de contexto. Para actualizar un nodo descendiente de elementos del mismo nivel es necesario usar una ruta absoluta de localización. A continuación lo explicamos con más detalle.

 

En la imagen siguiente podemos ver que el nodo de contexto (indicado en el campo Contexto) es el elemento Row de la BD. El nodo de contexto es el nodo donde está situado el control (para el que se está definiendo la acción) o con el que está asociado el control.
El atributo @Updated que se actualizará es, por tanto, el atributo @Updated de ese elemento Row concreto. Esto significa que cuando se desencadene el evento de control del elemento Row, se actualiza el atributo @Updated de ese elemento Row solamente (en este caso con la fecha actual).

Clic para ampliar

Si se modificara la expresión XPath para apuntar al nodo @Updated empezando por el nodo raíz (así, por ejemplo: $DB2/DB/RowSet/Row/@Updated), entonces se actualizaría el nodo @Updated de todos los elementos Row.

MTDUpdateNodeXP02

En la imagen anterior puede observar que se tiene acceso a todos los nodos de todas las fuentes de página por medio de expresiones XPath.

 

Hacer referencia al nodo de destino especificado con $MT_TargetNode

Después de definir el nodo de destino que se debe actualizar, podemos hacerle referencia con la variable $MT_TargetNode. Por ejemplo:
 
Nodo de actualización : @Updated
Valor de actualización: concat(current-date-no-TZ(), '-ID-', $MT_TargetNode/../@id)

 

daría un valor de actualización que tendría el valor del atributo @id del elemento Row como sufijo de la fecha actual (ver imagen siguiente).

MTDUpdateNodeXP03

Pero si los nodos de actualización fueran los atributos @Updated de todos los elementos Row y si la expresión XPath para el valor de actualización fuera el mismo que en el ejemplo anterior:
 
Nodo de actualización : $DB2/DB/RowSet/Row/@Updated
Valor de actualización: concat(current-date-no-TZ(), '-ID-', $MT_TargetNode/../@id)

 

entonces el atributo @Updated de cada elemento Row tendría un valor que tendría el valor del atributo @id de su propio elemento Row como sufijo de la fecha actual.

 

Modificar y actualizar nodos con $MT_TargetNode

La variable $MT_TargetNode puede ser de utilidad si quiere modificar y actualizar varios nodos con una única acción. La imagen siguiente muestra un ejemplo.

MTDUpdateNodeMTTargetNode

Esto es lo que hace la acción de la imagen anterior:

 

los nodos que se actualizan son todos los atributos del elemento actual. Estos nodos se indican con la expresión XPath de Actualizar nodos: @*
cuando un atributo es procesado, se convierte en el sujeto de $MT_TargetNode
la opción Resultado indica el valor actualizado del nodo, que, en el ejemplo anterior, es el valor original del atributo (obtenido con $MT_TargetNode) modificado para que la función XPath trim-string elimine los espacios que contenga al principio y al final
el resultado general es que se eliminarán los espacios al principio y al final de cada atributo

 

Elementos de origen con contenido mixto

Si se encuentra un elemento con contenido mixto (texto y elementos) con una expresión de localización XPath, entonces solo se devuelve el contenido de texto del elemento de contenido mixto. El contenido de texto de los elementos descendientes se omite.

 

Esto puede verse con claridad en este ejemplo de acción Actualizar nodos:

XPathMixedElementNonCompliance

Si la estructura XML tuviera esta estructura y contenido:

 

<Element1>

   <source>AAA

      <subsource>BBB</subsource>

  </source>

  <target></target>

</Element1>

 

El elemento target se actualizaría con el contenido de texto del elemento de contenido mixto source, mientras que se omitiría el contenido de su elemento secundario subsource. El nodo llamado target se actualizará con <target>AAA</target>.

 

Nota:si desea incluir el contenido de texto de los nodos descendientes, utilice una función string. Tomando el XML del ejemplo anterior, la expresión string($XML1/Element1/source, '') devolverá "AAABBB".

 

Nota:los gráficos usan un método de serialización conforme con XPath: cuando se encuentra un elemento de contenido mixto mediante una expresión de localización XPath, entonces se serializa también el contenido de texto de los elementos descendientes.

 

Actualizar varios nodos con matrices XPath

Puede actualizar varios nodos (los nodos de destino) buscándolos con una matriz XPath. Los valores de actualización también se deben introducir como matriz, en concreto una con el mismo tamaño que la matriz del nodo de destino. La actualización tiene lugar 1:1 y por miembros: el primer miembro de la matriz de valores actualiza el primer miembro de la matriz de destino y así sucesivamente. Por ejemplo:

 

Update Node : $XML1/User/Message/[@subject, @date, @senderID]
Update Value: ['Monthly Meeting June', '2018-05-31', 3485]

 

Tenga en cuenta que:

 

La variable $MT_TargetNode apunta a la matriz que identifica los nodos de destino. Puede comprobar si la variable contiene una matriz usando if($MT_TargetNode instance of array(*)) then...
Las matrices se evalúan y asignan en primer lugar; las asignaciones se ejecutan posteriormente en grupo. Esto significa que el valor de un nodo de destino se puede usar como dato de entrada.
Cada miembro de la matriz de destino se gestiona por separado, lo que permite que las actualizaciones de los otros nodos de destino continúen incluso aunque uno de los miembros de la matriz de destino produzca un error, aunque sí aparecerán los mensajes de error correspondientes.

© 2019 Altova GmbH