Ejemplo de regla XML avanzada: Aplicar formato a un valor XML extraído con XSL

Este tema contiene dos ejemplos que muestran cómo volver a formatear los valores extraídos de facturas XML.

Ejemplo 1: Cambiar el formato del año de YYYY a YY

Este ejemplo es para el campo InvoicePeriodStart de una factura Svefaktura:

  1. Seleccione el campo InvoicePeriodStart en la sección Campos de la ficha Campos del Asignador XML (en la parte derecha de la ventana).
    • 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.

  2. Seleccione Utilizar XSL en la parte inferior izquierda de la pantalla.
  3. Haga clic en Importar de reglas avanzadas. En este ejemplo se supone que no se han definido reglas avanzadas para este campo. Algún código XSL inicial relevante para el campo seleccionado se ha añadido al recuadro de edición de XSL.
    <xsl:template match="/">
       <xsl:for-each select="//x:Invoice/x:InvoicingPeriod/cbc:StartDateTime">
       </xsl:for-each>
    </xsl:template>
  4. Cambie en el código de esta forma para cambiar de formato YYYY a YY.

Los cambios necesarios se han añadido con texto en negrita:

<xsl:template match="/">
   <xsl:for-each select="//x:Invoice/x:InvoicingPeriod/cbc:StartDateTime">
          <xsl:choose>
<xsl:when test="starts-with(.,'20')">
<xsl:value-of select="substring(.,3)"/>  
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring(.,1)"/>
</xsl:otherwise>
          </xsl:choose>
   </xsl:for-each>
</xsl:template>

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).

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.

Ejemplo 2: Eliminar caracteres adicionales

En este ejemplo se eliminan caracteres del valor extraído que no son necesarios, para el campo SupplierTaxNumber1 (esto es, un número como SE556078650001 se cambia a 5560786500).

  1. Seleccione el campo SupplierTaxNumber1 en la sección Campos de la ficha Campos del Asignador XML (en la parte derecha de la ventana).
  2. Haga clic en el botón que se encuentra a la derecha del valor para visualizar las Reglas de asignación de campos del campo de la izquierda.
  3. Seleccione Utilizar XSL en la parte inferior izquierda de la pantalla.
  4. Haga clic en Importar de reglas avanzadas para agregar el XSL equivalente de las reglas avanzadas al recuadro de edición XSL de abajo, o para añadir algún código XSL inicial con el que empezar, si no se han definido reglas avanzadas. (Este es el aspecto si no se han definido reglas avanzadas.)
    <xsl:template match="/">
       <xsl:for-each select="//x:Invoice/x:InvoicingPeriod/cbc:StartDateTime">
       </xsl:for-each>
    </xsl:template>
  5. Cambie en el código de esta forma para cambiar de formato YYYY a YY.

Los cambios necesarios se han añadido con texto en negrita:

<xsl:template match="/">
   <xsl:for-each select="/x:Invoice/cac:SellerParty/cac:Party/cac:PartyTaxScheme">
<xsl:if test="cac:TaxScheme/cac:ID='VAT'">
<!-- <xsl:value-of select="CompanyID"/> -->
<xsl:choose>
<xsl:when test="starts-with(cac:CompanyID,'SE')">
<xsl:value-of select="substring(cac:CompanyID,3,10)"/>  
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="substring(cac:CompanyID,1)"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if>
<xsl:if test="TaxScheme/ID!='VAT'"></xsl:if>
   </xsl:for-each>
</xsl:template>

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).

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.

Otros ejemplos de reglas XML avanzadas:

Corregir un nombre de campo mal escrito en relación a los datos principales

Modificar un valor de campo XML extraído con XSL

Eliminar guiones (-) de un valor extraído

Seleccionar el nodo X según el nodo Y (o según el atributo a)

Seleccionar un nodo específico cuando más de un nodo coinciden después de utilizar una regla estándar

Seleccionar el nodo X si existe, y el nodo Y si no existe

Especificar un valor constante para un campo

Resumir los datos de las líneas de artículos en forma de una nota en una factura de resumen

Traducir un valor XML a otro que Kofax ReadSoft Invoices entienda