Ejemplo de regla XML avanzada: Eliminación de guiones (-) de un valor extraído

Algunos campos numéricos o facturas contienen valores que incluyen guiones que INVOICES no puede gestionar en facturas XML. En este ejemplo, eliminaremos los guiones del campo SupplierAccountNumber2 en una factura de tipo Svefaktura para que el valor extraído coincida con la especificación de formato para el campo:

  1. Seleccione el campo SupplierAccountNumber2 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 equivalente XSL de las reglas avanzadas anterior al recuadro de edición XSL de abajo. (¿Qué aspecto debería tener?)
    <xsl:template match="/">
      <xsl:for-each select="/x:Invoice/cac:PaymentMeans/cac:PayeeFinancialAccount">
        <xsl:if test="cac:FinancialInstitutionBranch/cac:FinancialInstitution/cac:ID='BGABSESS'">
          <xsl:value-of select="./cac:ID"/>
        </xsl:if>
        <xsl:if test="cac:FinancialInstitutionBranch/cac:FinancialInstitution/cac:ID!='BGABSESS'"></xsl:if>
      </xsl:for-each>
    </xsl:template>
  5. Cambie este tipo de código para eliminar los guiones.

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

<xsl:template match="/">
  <xsl:for-each select="/x:Invoice/cac:PaymentMeans/cac:PayeeFinancialAccount">
    <xsl:if test="cac:FinancialInstitutionBranch/cac:FinancialInstitution/cac:ID='BGABSESS'">
      <xsl:value-of select="translate(./cac:ID, '-', '')"/>
    </xsl:if>
    <xsl:if test="cac:FinancialInstitutionBranch/cac:FinancialInstitution/cac:ID!='BGABSESS'"></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.

Alternativa utilizando variables

Como alternativa a los cambios realizados en el paso 5 anterior, también puede cambiar el valor extraído modificando el XSL utilizando variables de esta forma:

<xsl:template match="/">
  <xsl:for-each select="/x:Invoice/cac:PaymentMeans/cac:PayeeFinancialAccount">
    <xsl:if test="cac:FinancialInstitutionBranch/cac:FinancialInstitution/cac:ID='BGABSESS'">
      <xsl:variable name="startstring">
        <xsl:value-of select="substring-before(./cac:ID, '-')" />
      </xsl:variable>
      <xsl:variable name="endstring">
        <xsl:value-of select="substring-after(./cac:ID, '-')" />
      </xsl:variable>
      <xsl:value-of select="concat($startstring, $endstring)"/>
    </xsl:if>
    <xsl:if test="cac:FinancialInstitutionBranch/cac:FinancialInstitution/cac:ID!='BGABSESS'"></xsl:if>
  </xsl:for-each>
</xsl:template>
In this case, the <xsl:value-of select="./cac:ID"/> string is replaced by the text in red above. The startstring and endstring variables are declared using the values of the ID node before and after each hyphen. The concat function is then used to combine the two strings. Multiple strings can be combined this way.

Nota

Siempre que utilice XSL para obtener un valor deseado, asegúrese de probar la salida cuando los datos contengan caracteres especiales (como &).

Para mostrar caracteres especiales normalmente (un carácter ampersand, &, se mostraría como &, por ejemplo), añada <xsl:output method="text" /> al segmento XSL de esta forma.



Si no se añade este código, el ampersand se mostraría como &amp;.

Otros ejemplos de reglas XML avanzadas:

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

Aplicar formato a un valor XML extraído con XSL

Modificar un valor de campo XML extraído con XSL

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

Resume los datos de las líneas de artículos en forma de una nota en facturas de resumen

Traducir un valor XML a otro que Kofax ReadSoft Invoices entienda