Exemple de règles avancées XML : Supprimer les traits d'union (-) d'une valeur extraite

Certains champs numériques sur les factures contiennent des valeurs contenant des traits d'union que INVOICES ne peut pas gérer dans les factures XML. Dans cet exemple, nous supprimerons les traits d'union du champ SupplierAccountNumber2 dans une facture Svefaktura pour que la valeur extraite corresponde à la spécification de format pour le champ :

  1. Sélectionnez le champ SupplierAccountNumber2 dans la section Champs sur l'onglet Champs du Mappeur XML (sur la partie droite de la fenêtre).
  2. Cliquez sur le bouton à droite de la valeur pour afficher le Champ règles de mappage pour le champ sur la gauche.
  3. Sélectionnez Utiliser XSL dans l'angle inférieur gauche de l'écran.
  4. Cliquez sur Importer à partir de règles avancées pour ajouter l'équivalent XSL des règles avancées ci-dessus à la boîte d'édition XSL ci-dessous. (À quoi cela devrait ressembler ?)
    <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. Modifiez le code comme ceci pour supprimer les traits d'union.

Modifications requises ajoutées avec leur texte en gras :

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

Cliquez sur Extraire et examinez l'image pour vérifier les résultats. Si vous avez besoin de modifier une condition, il suffit de cliquer dessus dans les Règles appliquées pour mapper ce champ, puis de cliquer sur Suppr. pour la supprimer, de faire les modifications nécessaires pour corriger la règle, et de recliquer sur Ajouter pour ajouter la nouvelle règle. Si vous devez modifier une condition, le processus est identique (et si une règle est basée sur celle-ci, la règle est également supprimée si vous supprimez la condition).

Déterminez si les modifications doivent s'appliquer à tous les documents ou uniquement à ceux de la définition de facture XML actuelle. Cliquez sur Enregistrer la définition XML pour enregistrer la modification pour la définition de facture XML actuelle uniquement (c'est-à-dire l'expéditeur actuel). Cliquez sur Enregistrer le profil XML si vous souhaitez que la règle s'applique à toutes les factures XML qui correspondent au profil de facture XML quelle que soit la définition de facture XML.

Alternative utilisant des variables

Comme alternative aux changements réalisés à l'étape 5 ci-dessus, vous pouvez également modifier la valeur extraite en modifiant le XSL à l'aide de variables de cette façon :

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

Remarque

Chaque fois que vous utilisez XSL pour obtenir une valeur désirée, assurez-vous de tester le résultat lorsque les données contiennent des caractères spéciaux (tels que &).

Pour afficher les caractères spéciaux normalement (le caractère esperluette, &, serait affiché comme & par exemple), ajoutez <xsl:output method="text" /> au fragment XSL de cette manière.



Si ce code n'est pas ajouté, l'esperluette serait affichée sous la forme « &amp; ».

Autres exemples de règles XML avancées :

Corriger un nom de champ mal orthographié en lien avec les données de référence

Formater une valeur XML extraite avec XSL

Modifier une valeur de champ XML extraite avec XSL

Sélectionner le nœud X sur la base du nœud Y (ou de l'attribut a)

Sélectionner un nœud particulier lorsque plus d'un nœud correspond après avoir utilisé une règle standard

Sélectionner le nœud X s'il existe et le nœud Y s'il n'existe pas

Préciser une valeur constante pour un champ

Récapituler les données des postes budgétaires sous forme de remarque dans des factures récapitulatives

Convertir une valeur XML en une valeur comprise par Kofax ReadSoft Entrance