Maison >développement back-end >Tutoriel XML/RSS >Traduction d'applications de services Web avec XSL

Traduction d'applications de services Web avec XSL

黄舟
黄舟original
2017-03-03 17:15:591781parcourir

Un problème courant avec les applications de services Web est que le logiciel backend actuel ne prend pas en charge XML (ou du moins pas le XML standardisé utilisé par votre service Web). Pour résoudre ce problème, de nombreuses architectures implémentent une phase de traduction qui interprète le XML reçu et le convertit dans un format plus approprié que le système backend peut reconnaître. Bien qu'il existe de nombreuses façons de traduire XML dans différents formats, le langage de feuille de style extensible (eXtensibleStylesheet Language, XSL) fournit une solution robuste, standard et compatible avec XML.

Quelques questions fréquemment posées

Il existe de nombreuses façons dont la traduction peut être nécessaire entre un message XML et l'application qui le traitera. Cependant, il existe également de nombreux problèmes courants, notamment :

Recherche
Mapping
Agrégation
Splitting
Formules)
Réorganisation
Le traitement des requêtes prend la valeur reçue et mappe à une valeur différente pour le système cible. Par exemple, votre XML a une valeur de 309, mais la valeur requise par votre application est « Uber Widget ».

Le mappage réaffecte essentiellement une valeur d'un champ à une autre valeur. Par exemple, en XML, vous pouvez avoir un élément AccountNumber qui doit être réaffecté dans un nouvel élément appelé CustomerAccountNumber.

Le traitement d'agrégation est la combinaison de deux éléments XML ou plus en un seul élément destiné à être utilisé dans les systèmes back-end. Un exemple courant consiste à combiner les champs nom et prénom en un seul nom (champ). Le fractionnement est l'inverse de l'agrégation, qui consiste à diviser une valeur XML en deux ou plusieurs composants distincts.

Le traitement de formule implique généralement le calcul d'une ou plusieurs valeurs XML pour obtenir une valeur pour une nouvelle application. Un exemple consiste à utiliser des sous-commandes XML pour calculer le montant total d’une commande.

Enfin, la réorganisation est le processus de modification de la séquence ou de la structure des éléments en XML afin qu'ils soient conformes à la séquence ou à la structure attendue par le système cible.

Exemple de mappage
Examinons maintenant de plus près ce processus à l'aide d'un exemple. Nous supposons que le XML reçu est comme celui du Listing 1 :

Listing 1 : webserviceorder.xml

<?xml version="1.0" ?>
<Order>
  <OrderNumber>8100</OrderNumber>
  <AccountNumber>99213</AccountNumber>
  <Item>
    <SKU>2388</SKU>
    <Description>Uber Widget</Description>
    <Quantity>15</Quantity>
    <PRicePer>10.95</PricePer>
  </Item>
  <Item>
    <SKU>6273</SKU>
    <Description>Flangeoid</Description>
    <Quantity>10</Quantity>
    <PricePer>52.00</PricePer>
  </Item>    
</Order>

Maintenant, notre système de commande nécessite un format légèrement différent. Tout ce que nous avons à faire est de convertir la commande reçue du service Web au format du listing 2.

Listing 2 : applicationorder.xml

<?xml version="1.0" encoding="UTF-8" ?>
<NeWorder>
  <CustomerAccountNumber>99213</CustomerAccountNumber>
  <CustomerOrderNumber>8100</CustomerOrderNumber>
  <OrderItems>
    <OrderItem>
      <SKU>2388</SKU>
      <CustomerPrice>10.95</CustomerPrice>
      <Quantity>15</Quantity>
      <Subtotal>164.25</Subtotal>
    </OrderItem>
    <OrderItem>
      <SKU>6273</SKU>
      <CustomerPrice>52.00</CustomerPrice>
      <Quantity>10</Quantity>
      <Subtotal>520</Subtotal>
    </OrderItem>
  </OrderItems>
</NewOrder>


Traduction

Comme il s'agit d'un exemple simplifié, nous convertissons Il n'y a que quelques choses à faire sur le modèle XSL lors du formatage. La première chose à laquelle nous devons prêter attention est la suivante : nous devons mapper certains éléments :

mapper la commande à la nouvelle commande
mapper le numéro de compte au numéro de compte client
mapper le numéro de commande au numéro de commande client
mapper l'article à l'article de commande
Mappez PricePer à CustomerPrice
Ensuite, nous devons réorganiser l'élément OrderItem sous un nouvel élément appelé OrderItems. Enfin, nous ajoutons un nouvel élément appelé Sous-total, qui est calculé en fonction du prix unitaire et de la quantité.

Le mappage des traductions est le plus simple, car il vous suffit de définir le nouvel élément dans le modèle et de spécifier que le nouvel élément a la valeur de l'élément dans le document XML reçu. La réorganisation des éléments s'effectue en plaçant l'appel du sous-modèle Item dans un nouvel élément appelé OrderItems. Enfin, utilisez une simple expression XPath pour effectuer le calcul. Le listing 3 montre le document XSL utilisé pour transformer le XML reçu en XML spécifique à l'application.

Liste 3 : translate.xsl

<?xml version="1.0"  ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:apply-templates select="Order" />
  </xsl:template>
  <xsl:template match="Order">
    <NewOrder>
      <CustomerAccountNumber><xsl:value-of select="AccountNumber" /></CustomerAccountNumber>
      <CustomerOrderNumber><xsl:value-of select="OrderNumber" /></CustomerOrderNumber>
      <OrderItems>
        <xsl:apply-templates select="Item" />
      </OrderItems>
    </NewOrder>
  </xsl:template>
  <xsl:template match="Item">
    <OrderItem>
      <SKU><xsl:value-of select="SKU" /></SKU>
      <CustomerPrice><xsl:value-of select="PricePer" /></CustomerPrice>
      <Quantity><xsl:value-of select="Quantity" /></Quantity>
      <Subtotal><xsl:value-of select="PricePer * Quantity" /></Subtotal>
    </OrderItem>
  </xsl:template>
    
</xsl:stylesheet>

Ce qui précède est le contenu de l'utilisation de XSL pour traduire des applications de services Web. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www. .php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn