Ejemplo de regla XML avanzada: Seleccionar un nodo específico cuando aparece más de un nodo al utilizar una regla estándar

Cuando utiliza una regla estándar para un campo, por ejemplo, aún puede haber varios nodos que coincidan con el XPath, proporcionándole varios candidatos entre los que elegir. Se puede crear una regla avanzada para especificar el correcto.

En este ejemplo, la regla avanzada para una factura Svefaktura ha generado este XPath para el campo Identifier del proveedor: /Invoice/SellerParty/Party/Partyidentification/ID y, en consecuencia, el cuadro de diálogo de correlación indica que hay tres instancias de esta ruta en la factura, después de que haga clic en Extraer para comprobar el resultado.

  1. Seleccione el campo Identifier en la categoría Proveedor de la ficha Campos del Asignador XML (en la parte derecha de la ventana).
  2. Haga clic en el botón a la derecha del valor:

    si no se ha definido ninguna regla, o

    si ya existe una regla para el campo.

  3. En la sección de selección de nodo XML de Reglas avanzadas, hacia la parte superior de la ficha Reglas de asignación de campos que se muestra en la parte izquierda, despliegue el nodo Invoice.
  4. Acceda y seleccione la subcarpeta que representa el campo Identifier para el proveedor (esto es, para este ejemplo, /Invoice/SellerParty/Party/Partyidentification/ID).
  5. Haga clic en Seleccionar.
  6. Seleccione Ninguna condición: Coincide tanto verdadera como falsa en Condiciones en la parte central de la pantalla.
  7. Seleccione Utilizar valor del nodo XML.
  8. En el cuadro de abajo, seleccione el nodo para el valor que se va a utilizar (para facturas Svefaktura debería ser cac:ID). Es posible que tenga que desplegar el nodo que se muestra, si el nodo que necesita seleccionar es un subnodo.
  9. Haga clic en Añadir.
  10. Seleccione Usar XSL en el área la izquierda de la parte inferior de la ventana.
  11. Haga clic en el botón Importar de reglas avanzadas y añada el código XSL que representa la regla anterior seleccionada al recuadro de código de más abajo. Este sería el código para facturas Svenfaktura:
    <xsl:template match="/">
       <xsl:for-each select="/x:Invoice/cac:SellerParty/cac:Party/cac:PartyIdentification/cac:ID">
          <xsl:value-of select="."/>   </xsl:for-each>
    </xsl:template>
  12. Mueva el contenido del atributo select del elemento <xsl:for-each> (fila la destacada de arriba, en la segunda fila del código) al atributo select del elemento <xsl:value-of> en la fila siguiente para que tenga el aspecto a continuación. Añada [2] después de PartyIdentification para indicar que quiere utilizar la segunda instancia del archivo. Además, elimine el elemento <xsl:for-each> antes y después del texto señalado original, para que el código tenga el aspecto siguiente.
    <xsl:template match="/">
          <xsl:value-of select="/x:Invoice/cac:SellerParty/cac:Party/cac:PartyIdentification[2]/cac:ID"/>
    </xsl:template>
  13. Haga clic en Extraer y revise la imagen para comprobar el resultado. Si necesita modificar la regla, debe hacer clic en ella en el recuadro Reglas aplicadas para asignar este campo, haga clic en Supr para eliminarla, realice los cambios necesarios para arreglar la regla y haga clic otra vez en Añadir para añadir la regla modificada. Si necesita modificar una condición, el proceso es el mismo (y si hay una regla basada en ella, la regla también se elimina al eliminar la condición).
  14. Tenga en cuenta si los cambios se deben aplicar a todas las facturas o sólo a aquellas que tengan la definición de facturas de XML actual. Haga clic en Guardar definición XML para guardar el cambio solo para la definición actual de factura XML (esto es, el proveedor actual). Haga clic en Guardar el perfil XML si quiere que las reglas se apliquen a todas las facturas XML que coinciden con el perfil de factura de XML independientemente de la definición de factura XML.