Règle XMLtoJSON

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d'Apigee Edge.

icône de la règle

Quoi

Cette règle convertit les messages du format XML (Extensible Markup Language) au format JSON (JavaScript Object Notation), vous offrant ainsi plusieurs options pour contrôler la conversion des messages.

En supposant que votre objectif soit de convertir une réponse au format XML en réponse au format JSON, la règle sera associée à un flux de réponses (par exemple, Response/ProxyEndpoint/PostFlow).

Cette règle est une règle standard qui peut être déployée sur n'importe quel type d'environnement. Pour en savoir plus sur les types de règles et la disponibilité avec chaque type d'environnement, consultez la section Types de règles.

À propos

Dans un scénario de médiation type, une règle JSONtoXML sur le flux de requêtes entrantes est souvent associée à une règle XMLtoJSON sur le flux de réponses sortantes. En combinant des règles de cette manière, une API JSON peut être exposée pour les services de backend qui ne sont compatibles nativement qu'avec le format XML.

Pour les scénarios dans lesquels les API sont consommées par diverses applications clientes pouvant nécessiter JSON ou XML, le format de réponse peut être défini de manière dynamique en configurant l'exécution conditionnelle de règles JSONtoXML et XMLtoJSON. Pour voir une mise en œuvre de ce scénario, consultez la page Variables de flux et conditions.


Exemples

Pour obtenir des informations détaillées sur la conversion entre JSON et XML, consultez cet article.

Convertir une réponse

<XMLToJSON name="ConvertToJSON">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

Cette configuration, qui est la configuration minimale requise pour la conversion de XML en JSON, prend un message de réponse au format XML en tant que source, puis crée un message au format JSON renseigné dans la OutputVariable response. Apigee utilise automatiquement le contenu de cette variable comme message pour la prochaine étape du traitement.


Documentation de référence des éléments

Vous trouverez ci-dessous les éléments et les attributs que vous pouvez configurer sur cette règle.

<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
    <DisplayName>XML to JSON 1</DisplayName>
    <Source>response</Source>
    <OutputVariable>response</OutputVariable>
    <Options>
        <RecognizeNumber>true</RecognizeNumber>
        <RecognizeBoolean>true</RecognizeBoolean>
        <RecognizeNull>true</RecognizeNull>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
        <NamespaceSeparator>***</NamespaceSeparator>
        <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
        <TextNodeName>TEXT</TextNodeName>
        <AttributeBlockName>FOO_BLOCK</AttributeBlockName>
        <AttributePrefix>BAR_</AttributePrefix>
        <OutputPrefix>PREFIX_</OutputPrefix>
        <OutputSuffix>_SUFFIX</OutputSuffix>
        <StripLevels>2</StripLevels>
        <TreatAsArray>
            <Path unwrap="true">teachers/teacher/studentnames/name</Path>
        </TreatAsArray>
    </Options>
    <!-- Use Options or Format, not both -->
    <Format>yahoo</Format>
</XMLToJSON>

Attributs <XMLtoJSON>

<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">

Le tableau suivant décrit les attributs communs à tous les éléments parents des règles :

Attribut Description Par défaut Presence
name

Nom interne de la règle. La valeur de l'attribut name peut contenir des lettres, des chiffres, des espaces, des tirets, des traits de soulignement et des points. Cette valeur ne peut pas dépasser 255 caractères.

Vous pouvez également utiliser l'élément <DisplayName> pour ajouter un libellé à la règle dans l'éditeur de proxy de l'interface utilisateur de gestion, en utilisant un nom différent, en langage naturel.

N/A Obligatoire
continueOnError

Définissez sur false pour afficher une erreur en cas d'échec d'une règle. Il s'agit du comportement attendu pour la plupart des règles.

Définissez sur true pour que l'exécution du flux se poursuive même après l'échec d'une règle. Voir également :

false Facultatif
enabled

Définissez sur true pour appliquer la règle.

Définissez sur false pour désactiver la règle. La stratégie ne sera pas appliquée, même si elle reste associée à un flux.

true Facultatif
async

Cet attribut est obsolète.

false Obsolète

Élément <DisplayName>

Utilisez-le, en plus de l'attribut name, pour appliquer un libellé à la règle dans l'éditeur de proxys de l'interface de gestion en utilisant un nom différent, en langage naturel.

<DisplayName>Policy Display Name</DisplayName>
Par défaut

N/A

Si vous omettez cet élément, la valeur de l'attribut name de la règle est utilisée.

Presence Facultatif
Type Chaîne

Élément <Source>

Variable spécifiant le message XML que vous souhaitez convertir au format JSON.

L'en-tête HTTP Content-Type du message source doit être défini sur application/xml, sinon la règle n'est pas appliquée.

Si <Source> n'est pas défini, il est traité comme message (qui renvoie request lorsque la règle est associée à un flux de requête ou response lorsque la règle est associée à un flux de réponse).

Si la variable source ne peut pas être résolue ou est résolue en un type qui n'est pas un message, la règle génère une erreur.

<Source>response</Source>
Par défaut Valeur de l'élément Source
Presence Facultatif
Type Message

Élément <OutputVariable>

Indique l'emplacement où stocker la sortie de la conversion du format XML au format JSON. En règle générale, cet élément n'est pas inclus dans la configuration de la règle.

Apigee analyse la charge utile du message XML spécifié dans Source, la convertit au format JSON, stocke le résultat dans la charge utile de OutputVariable et définit l'en-tête HTTP Content-type du message OutputVariable à application/json.

Si OutputVariable n'est pas spécifié, la valeur de Source est utilisée par défaut. Par exemple, si la source correspond à response, la valeur par défaut de OutputVariable est response.

<OutputVariable>response</OutputVariable>
Par défaut le message spécifié dans Source
Presence Facultatif
Type Message

<Options>

Les options vous permettent de contrôler la conversion du format XML au format JSON. Utilisez le groupe <Options> pour ajouter des paramètres de conversion spécifiques, ou l'élément <Format>, qui vous permet de référencer un modèle d'options prédéfinies. Vous ne pouvez pas utiliser à la fois <Options> et <Format>.

<Options> est requis si <Format> n'est pas utilisé.

Élément <RecognizeNumber>

Si la valeur est "true", les champs numériques de la charge utile XML conservent leur format d'origine.

<RecognizeNumber>true</RecognizeNumber>

Prenons l'exemple XML suivant :

<a>
  <b>100</b>
  <c>value</c>
</a>

Si RecognizeNumber a la valeur true, la règle la convertit en :

{
    "a": {
        "b": 100,
        "c": "value"
    }
}

Si RecognizeNumber a la valeur false, la règle la convertit en :

{
  "a": {
    "b": "100",
    "c": "value"
  }
}
Par défaut false
Presence Facultatif
Type Booléen

<RecognizeBoolean> element

Permet à la conversion de conserver les valeurs booléennes "true" et "false" plutôt que de les transformer en chaînes.

<RecognizeBoolean>true</RecognizeBoolean>

Pour l'exemple XML suivant :

<a>
  <b>true</b>
  <c>value</c>
</a>

Si RecognizeBoolean a la valeur true, la règle la convertit en :

{
    "a": {
        "b": true,
        "c": "value"
    }
}

Si RecognizeBoolean a la valeur false, la règle la convertit en :

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
Par défaut false
Presence Facultatif
Type Booléen

Élément <RecognizeNull>

Permet de convertir des valeurs vides en valeurs nulles.

<RecognizeNull>true</RecognizeNull>

Pour l'exemple XML suivant :

<a>
  <b></b>
  <c>value</c>
</a>

Si la valeur de RecognizeNull est true et qu'il n'y a pas d'option NullValue, l'élément XML est converti comme suit :

{
  "a": {
    "b": null,
    "c": "value"
  }
}

Si la valeur de RecognizeNull est false, l'élément XML est converti comme suit :

{
  "a": {
    "b": {},
    "c": "value"
  }
}
Par défaut false
Presence Facultatif
Type Booléen

Élément <NullValue>

Indique la valeur à laquelle les valeurs nulles reconnues dans le message source doivent être converties. La valeur par défaut est null. Cette option n'est effective que si la valeur de RecognizeNull est "true".

<NullValue>not-present</NullValue>

Pour l'exemple XML suivant :

<a>
  <b></b>
  <c>value</c>
</a>

Si la valeur de RecognizeNull est true et que le champ NullValue n'est pas spécifié, l'élément XML est converti comme suit :

{
  "a": {
    "b": null,
    "c": "value"
  }
}

Si la valeur de RecognizeNull est true et que la valeur de NullValue est not-present, l'élément XML est converti comme suit :

{
  "a": {
    "b": "not-present",
    "c": "value"
  }
}
Par défaut null
Presence Facultatif
Type Chaîne

Options d'espace de noms

Par défaut, cette règle omet les espaces de noms XML dans le fichier JSON généré. Pour spécifier que les espaces de noms du document XML doivent être traduits dans le fichier JSON généré, utilisez ces éléments ensemble.

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
<NamespaceSeparator>***</NamespaceSeparator>

Prenons l'exemple XML suivant :

<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com">
  <ns1:b>value</ns1:b>
</a>

Si NamespaceSeparator n'est pas spécifié, la structure JSON suivante est générée :

{
    "a": {
        "b": "value"
    }
}

Si les éléments NamespaceBlockName, DefaultNamespaceNodeName et NamespaceSeparator sont spécifiés respectivement en tant que #namespaces, & et ***, la structure JSON suivante est générée :

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
Par défaut Aucune. Si <NamespaceBlockName> n'est pas spécifié, la règle génère un fichier JSON de sortie qui ne fait référence à aucun espace de noms XML, que le message source fasse référence à des espaces de noms ou pas.
Presence Facultatif
Toutefois, si vous spécifiez <NamespaceBlockName>, vous devez également spécifier les deux autres éléments.
Type Chaînes

Options de texte

Utilisez ces éléments ensemble.

      <TextAlwaysAsProperty>true|false</TextAlwaysAsProperty>
      <TextNodeName>TEXT</TextNodeName>

Lorsque la règle rencontre un élément XML qui ne contient qu'un seul nœud de texte en tant qu'enfant, la règle traduit le contenu textuel de cet élément XML en une propriété du hachage JSON.

Lorsque la règle rencontre un élément XML contenant plusieurs enfants de contenu mixte, ces options vous permettent de contrôler la sortie JSON de n'importe quel nœud de texte enfant.

Prenons l'exemple de la configuration de règle suivante :

<XMLToJSON name='XMLToJSON-1'>
  <Options>
    <TextAlwaysAsProperty>???</TextAlwaysAsProperty>
    <TextNodeName>#text</TextNodeName>
  </Options>
</XMLToJSON>

Pour les entrées XML données, la règle génère ces sorties, selon que TextAlwaysAsProperty est true ou false :

Entrée XML Sortie JSON
quand TextAlwaysAsProperty est false quand TextAlwaysAsProperty est true
<a>value1</a>
{
  "a": "value1"
}
{
  "a": {
    "#text": "value1"
  }
}
<a>value1
  <b>value2</b>
</a>
{
  "a": {
    "#text": "value1\n",
    "b": "value2"
  }
}
{
  "a": {
    "#text": "value1\n",
    "b": {
      "#text": "value2"
    }
  }
}
Par défaut <TextAlwaysAsProperty> : false
<TextNodeName> : chaîne vide
Presence Facultatif
Type <TextAlwaysAsProperty> : booléen
<TextNodeName> : chaîne

Options d'attribut

Ensemble, ces éléments vous permettent de regrouper les valeurs d'attributs dans un bloc JSON et d'ajouter des préfixes aux noms d'attributs.

<AttributeBlockName>FOO_BLOCK</AttributeBlockName>
<AttributePrefix>BAR_</AttributePrefix>

Prenons l'exemple XML suivant :

<a attrib1="value1" attrib2="value2"/>

Si les attributs (AttributeBlockName et AttributePrefix) sont spécifiés tels qu'ils sont définis dans l'exemple de règle XMLtoJSON, la structure JSON suivante est générée :

{
  "a": {
    "FOO_BLOCK": {
      "BAR_attrib1": "value1",
      "BAR_attrib2": "value2"
    }
  }
}

Si seul AttributeBlockName est spécifié, la structure JSON suivante est générée :

{
    "a": {
        "FOO_BLOCK": {
            "attrib1": "value1",
            "attrib2": "value2"
        }
    }
}

Si seul AttributePrefix est spécifié, la structure JSON suivante est générée :

{
    "a": {
        "BAR_attrib1": "value1",
        "BAR_attrib2": "value2"
    }
}

Si aucun de ces éléments n'est spécifié, la structure JSON suivante est générée :

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
Par défaut Aucun
Presence Facultatif
Type Chaîne

Éléments <OutputPrefix> et <OutputSuffix>

Utilisez ces éléments ensemble pour appliquer un préfixe et/ou un suffixe au fichier JSON généré.

<OutputPrefix>PREFIX_</OutputPrefix>
<OutputSuffix>_SUFFIX</OutputSuffix>

Prenons l'exemple XML suivant :

<a>value</a>

Supposons que la configuration des règles soit la suivante :

<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>{ "result": </OutputPrefix>
    <OutputSuffix>}</OutputSuffix>
  </Options>
</XMLToJSON>

La structure JSON suivante est générée :

{
  "result": {
    "a": "value"
  }
}

Vous pouvez omettre l'une des valeurs suivantes, ou les deux : OutputPrefix et OutputSuffix.

L'utilisation de ces éléments peut générer du code JSON non valide. Par exemple, utilisez cette configuration de règle :

<XMLToJSON name='XMLToJSON-4'>
  <Options>
    <OutputPrefix>PREFIX_</OutputPrefix>
  </Options>
</XMLToJSON>

La règle génère les éléments suivants, qui ne sont pas des données JSON valides :

PREFIX_{
  "a" : "value"
}

Si la configuration ne spécifie ni OutputPrefix, ni OutputSuffix, la règle génère la structure JSON suivante :

{
  "a": "value"
}
Par défaut Voir exemples ci-dessus.
Presence Facultatif
Type Chaîne

Élément <StripLevels>

<Options>
    <StripLevels>4</StripLevels>
</Options>

Parfois, les charges utiles XML, telles que SOAP, comportent de nombreux niveaux parents que vous ne souhaitez pas inclure dans le fichier JSON converti. Voici un exemple de réponse SOAP contenant de nombreux niveaux :

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
      <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
          <GetCityWeatherByZIPResult>
              <State>CO</State>
              <City>Denver</City>
              <Description>Sunny</Description>
              <Temperature>62</Temperature>
          </GetCityWeatherByZIPResult>
      </GetCityWeatherByZIPResponse>
  </soap:Body>
</soap:Envelope>

Il y a quatre niveaux avant d'accéder aux niveaux State, City, Description, et Temperature. Sans <StripLevels>, la réponse JSON convertie ressemblerait à ceci :

{
   "Envelope" : {
      "Body" : {
         "GetCityWeatherByZIPResponse" : {
            "GetCityWeatherByZIPResult" : {
               "State" : "CO",
               "City" : "Denver",
               "Description" : "Sunny",
               "Temperature" : "62"
            }
         }
      }
   }
}

Si vous souhaitez supprimer ces quatre premiers niveaux dans la réponse JSON, vous devez définir <StripLevels>4</StripLevels>, ce qui vous donnera le message JSON suivant :

{
  "State" : "CO",
  "City" : "Denver",
  "Description" : "Sunny",
  "Temperature" : "62"
}

Vous pouvez supprimer des niveaux jusqu'au premier élément contenant plusieurs enfants. Qu'entendons-nous par là ? Examinons un exemple JSON plus complexe :

{
   "Envelope" : {
      "Body" : {
         "GetCityForecastByZIPResponse" : {
            "GetCityForecastByZIPResult" : {
               "ResponseText" : "City Found",
               "ForecastResult" : {
                  "Forecast" : [
                     {
                        "ProbabilityOfPrecipiation" : {
                           "Nighttime" : "00",
                           "Daytime" : 10
                        }  ...

Dans cet exemple, le niveau 3 est GetCityForecastByZIPResponse, qui n'a qu'un seul enfant. Ainsi, si vous utilisez <StripLevels>3</StripLevels> (vous supprimez les trois premiers niveaux), le contenu JSON se présente comme suit :

{
   "GetCityForecastByZIPResult" : {
      "ResponseText" : "City Found",
      "ForecastResult" : {
         "Forecast" : [
            {
               "ProbabilityOfPrecipiation" : {
                  "Nighttime" : "00",
                  "Daytime" : 10
               }  ...

Notez que GetCityForecastByZIPResult comporte plusieurs enfants. Comme il s'agit du premier élément contenant plusieurs enfants, vous pouvez supprimer ce dernier niveau à l'aide de <StripLevels>4</StripLevels>, ce qui vous donnera le message JSON suivant :

{
   "ResponseText" : "City Found",
   "ForecastResult" : {
      "Forecast" : [
         {
            "ProbabilityOfPrecipiation" : {
               "Nighttime" : "00",
               "Daytime" : 10
            }  ...

Comme le niveau 4 est le premier niveau contenant plusieurs enfants, vous ne pouvez pas supprimer des niveaux inférieurs à celui-ci. Si vous définissez le niveau de suppression sur 5, 6, 7 et ainsi de suite, vous obtiendrez la réponse ci-dessus.

Par défaut 0 (aucune suppression de niveau)
Presence Facultatif
Type Entier

Élément <TreatAsArray>/<Path>

<Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

Cette combinaison d'éléments vous permet de vous assurer que les valeurs d'un document XML sont toujours traduites en un tableau JSON. Cela peut être utile lorsque le nombre d'éléments enfants varie pour différentes charges utiles. Le comportement par défaut d'Apigee consiste à convertir plusieurs éléments enfants du même nom en tableau JSON et des éléments enfants uniques en primitif JSON. L'option TreatAsArray vous permet de vous assurer que les éléments enfants sont toujours traduits en tableau JSON.

L'utilisation de TreatAsArray peut améliorer la structure du code ultérieur qui gère la sortie, car les données du tableau sont renvoyées de la même manière à chaque fois. Par exemple, l'évaluation d'un chemin JSONPath de $.teachers.teacher.studentnames.name[0] renvoie la valeur de prénom de manière cohérente, que le fichier XML d'origine contienne un ou plusieurs éléments name.

Revenons en arrière et observons le comportement par défaut de la règle XMLtoJSON, puis découvrons comment contrôler la sortie à l'aide de <TreatAsArray>/<Path>.

Lorsqu'un document XML contient un élément avec plusieurs occurrences (ce qui peut se produire lorsque le schéma XML spécifie maxOccurs='unbounded' pour l'élément), la règle XML vers JSON place automatiquement ces valeurs dans un tableau. Par exemple, le bloc XML suivant :

<teacher>
    <name>teacherA</name>
    <studentnames>
        <name>student1</name>
        <name>student2</name>
    </studentnames>
</teacher>

...est automatiquement converti dans le message JSON suivant sans configuration particulière de la règle :

{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : [
          "student1",
          "student2"
        ]
      }
    }
  }
}

Notez que les deux noms d'élèves sont contenus dans un tableau.

Toutefois, si un seul élève apparaît dans le document XML, la règle XMLtoJSON traite automatiquement la valeur comme une chaîne unique et non comme un tableau de chaînes, comme illustré dans l'exemple suivant :

{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : "student1"
      }
    }
  }
}

Dans les exemples précédents, des données similaires ont été converties différemment : une fois en tant que tableau, une autre en tant que chaîne unique. L'élément <TreatAsArray>/<Path> vous permet de contrôler la sortie pour vous assurer que les noms des élèves sont toujours convertis dans un tableau, même s'il n'y a qu'une seule valeur. Pour ce faire, identifiez le chemin d'accès à l'élément dont vous souhaitez convertir les valeurs dans un tableau, comme suit :

<Options>
    <TreatAsArray>
        <Path>teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

La configuration ci-dessus génère le message JSON comme suit :

{
  "teachers" : {
    "teacher" : {
      "name" : "teacherA",
      "studentnames" : {
        "name" : ["student1"]
      }
    }
  }
}

Notez que "student1" se trouve désormais dans un tableau. Désormais, qu'il y ait un ou plusieurs élèves, vous pouvez les récupérer à partir d'un tableau JSON dans votre code en utilisant le JSONPath suivant : $.teachers.teacher.studentnames.name[0]

L'élément <Path> comporte également un attribut unwrap, qui est expliqué dans la section suivante.

Par défaut N/A
Presence Facultatif
Type Chaîne

Attributs

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
Attribut Description Presence Type
unwrap

Valeur par défaut : false

Supprime l'élément de la sortie JSON. Utilisez cet attribut pour simplifier ou aplatir ("désencapsuler") le message JSON, ce qui raccourcit également le JSONPath nécessaire pour récupérer les valeurs. Par exemple, au lieu d'utiliser $.teachers.teacher.studentnames.name[*], vous pouvez aplatir le message JSON et utiliser $.teachers.studentnames[*].

Voici un exemple JSON :

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}...

Dans cet exemple, vous pouvez affirmer que l'élément teacher et l'élément name de "studentnames" sont inutiles. Vous pouvez les supprimer ou les désencapsuler. Pour configurer l'élément <Path> à cette fin, procédez comme suit :

<TreatAsArray>
    <Path unwrap="true">teachers/teacher</Path>
    <Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>

L'attribut unwrap est défini sur "true", et les chemins d'accès aux éléments à désencapsuler sont fournis. La sortie JSON doit maintenant se présenter comme suit :

{
  "teachers" : [{
      "name" : "teacherA",
      "studentnames" : ["student1","student2"]
      }]...

Étant donné que l'élément <Path> se trouve dans l'élément <TreatAsArray>, les deux éléments du chemin sont traités comme des tableaux dans la sortie JSON.

Facultatif Booléen

Pour obtenir plus d'exemples et un tutoriel présentant les fonctionnalités, consultez cet article de la communauté Google Cloud.

<Format>

Ce format vous permet de contrôler la conversion du format XML au format JSON. Saisissez le nom d'un modèle prédéfini contenant une combinaison spécifique d'éléments d'options décrits dans cet article. Les formats prédéfinis sont les suivants : xml.com, yahoo, google et badgerFish.

Utilisez l'élément <Format> ou le groupe <Options>. Vous ne pouvez pas utiliser à la fois <Format> et <Options>.

Vous trouverez ci-dessous les définitions de format de chaque modèle prédéfini.

xml.com

<RecognizeNull>true</RecognizeNull>
<TextNodeName>#text</TextNodeName>
<AttributePrefix>@</AttributePrefix>

yahoo

<RecognizeNumber>true</RecognizeNumber>
<TextNodeName>content</TextNodeName>

google

<TextNodeName>$t</TextNodeName>
<NamespaceSeparator>$</NamespaceSeparator>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>

badgerFish

<TextNodeName>$</TextNodeName>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<AttributePrefix>@</AttributePrefix>
<NamespaceSeparator>:</NamespaceSeparator>
<NamespaceBlockName>@xmlns</NamespaceBlockName>
<DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>

Syntaxe des éléments :

<Format>yahoo</Format>
Par défaut (aucun)
Valeurs valides Choisissez l'une des options suivantes :
xml.com, yahoo, google, badgerFish
Presence Facultatif, mais obligatoire si <Options> n'est pas utilisé.
Type Chaîne

Schémas


Informations de référence sur les erreurs

Cette section décrit les codes d'erreur et les messages d'erreur renvoyés et les variables d'erreur définies par Apigee lorsque cette règle déclenche une erreur. Ces informations sont importantes si vous développez des règles de défaillance afin de gérer les pannes. Pour en savoir plus, consultez les pages Ce que vous devez savoir à propos des erreurs liées aux règles et Gérer les pannes.

Erreurs d'exécution

Ces erreurs peuvent se produire lors de l'exécution de la règle.

Code d'erreur État HTTP Cause Corriger
steps.xmltojson.ExecutionFailed ExecutionFailed Cette erreur se produit lorsque la charge utile d'entrée (XML) est vide ou que le code XML d'entrée est mal configuré ou non valide.
steps.xmltojson.InCompatibleTypes ExecutionFailed Cette erreur se produit si le type de la variable définie dans l'élément <Source> et l'élément <OutputVariable> ne sont pas identiques. La correspondance du type des variables contenues dans l'élément <Source> et l'élément <OutputVariable> est obligatoire.
steps.xmltojson.InvalidSourceType ExecutionFailed Cette erreur se produit si le type de la variable utilisée pour définir l'élément <Source> n'est pas valide. Les types de variable valides sont message et chaîne.
steps.xmltojson.OutputVariableIsNotAvailable ExecutionFailed Cette erreur se produit si la variable spécifiée dans l'élément <Source> de la règle XML vers JSON est de type chaîne et que l'élément <OutputVariable> n'est pas défini. L'élément <OutputVariable> est obligatoire lorsque la variable définie dans l'élément <Source> est de type chaîne.
steps.xmltojson.SourceUnavailable ExecutionFailed Cette erreur se produit si la variable message spécifiée dans l'élément <Source> de la règle XML vers JSON est l'une des suivantes :
  • hors du champ d'application (non disponible dans le flux spécifique où la règle est exécutée) ou
  • impossible à résoudre (non définie).

Erreurs de déploiement

Ces erreurs peuvent se produire lorsque vous déployez un proxy contenant cette règle.

Nom de l'erreur Cause Corriger
EitherOptionOrFormat Si l'un des éléments <Options> ou <Format> n'est pas déclaré dans la règle XML vers JSON, le déploiement du proxy d'API échoue.
UnknownFormat Si un format inconnu est défini sur l'élément <Format> de la règle XML vers JSON, le déploiement du proxy d'API échoue. Les formats prédéfinis sont les suivants : xml.com, yahoo, google et badgerFish.

Variables de panne

Ces variables sont définies lorsqu'une erreur d'exécution se produit. Pour en savoir plus, consultez la section Ce que vous devez savoir sur les erreurs liées aux règles.

Variables Lieu Exemple
fault.name="fault_name" fault_name est le nom de l'erreur, tel qu'indiqué dans le tableau Erreurs d'exécution ci-dessus. Le nom d'erreur est la dernière partie du code d'erreur. fault.name = "SourceUnavailable"
xmltojson.policy_name.failed policy_name est le nom spécifié par l'utilisateur de la règle qui a provoqué l'erreur. xmltojson.XMLtoJSON-1.failed = true

Exemple de réponse d'erreur

{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}

Exemple de règle de défaillance

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadXML</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition>
</FaultRule>

Articles associés

Conversion JSON en XML : Règle JSONtoXML