XSLTransform ポリシー

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントを表示する。

ポリシー アイコン

概要

XSLTransform ポリシーは、カスタム拡張可能スタイルシート言語変換(XSLT)を XML メッセージに適用します。これにより、XML から別の形式(HTML、書式なしテキストなど)に変換できます。このポリシーは、XML をサポートする一方で同じデータに対して異なる XML 形式を使用している複数のアプリケーションを統合するときによく使用されます。

このポリシーは拡張可能なポリシーです。Apigee ライセンスによっては、このポリシーの使用によって費用や使用量に影響する場合があります。ポリシータイプと使用量への影響については、ポリシータイプをご覧ください。

入力

XSL ポリシーは、次の入力を使用します。

  • (必須)API プロキシの /resources/xsl に格納されている変換ルール群を含む SL スタイルシートの名前。
  • (必須)変換する XML(通常はリクエストまたはレスポンス メッセージ)。
  • (省略可)出力を保存する変数の名前。
  • (省略可)XSL スタイルシートのパラメータと一致するパラメータ。

解析プロセッサ

Apigee は Saxon XSLT プロセッサに依存しており、XSLT 1.0 と 2.0 をサポートしています。

サポートされていない XSL 要素

XSL ポリシーでは、次の XSL 要素をサポートしていません。

  • <xsl:include>
  • <xsl:import>

サンプル

次のサンプルは、XSL 変換フローを示しています。

XSL ポリシー -->

<XSL name="TransformXML">
  <ResourceURL>xsl://my_transform.xsl</ResourceURL>
  <Source>request</Source>
</XSL>

シンプルな XSL ポリシー。次の例に移って、ポリシーで参照されている XSLT スタイルシートを確認します(my_transform.xsl)。この <Source> 要素は重要です。たとえば、変換する XML がレスポンス内に存在する場合、<Source>response に設定しない限り、変換は実行されません(ポリシーはレスポンス フローに接続されます)。ただし、この場合、変換する XML はリクエストに含まれます。

XSLT スタイルシート ->

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="text"/>
  <xsl:variable name="newline">
    <xsl:text></xsl:text>
  </xsl:variable>
  <xsl:template match="/">
  <xsl:text>&lt;Life&gt;</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:text>Here are the odd-numbered items from the list:</xsl:text>
    <xsl:value-of select="$newline"/>
    <xsl:for-each select="list/listitem">
      <xsl:if test="(position() mod 2) = 1">
        <xsl:number format="1. "/>
        <xsl:value-of select="."/>
        <xsl:value-of select="$newline"/>
      </xsl:if>
    </xsl:for-each>
  <xsl:text>&lt;/Life&gt;</xsl:text>
</xsl:template>
</xsl:stylesheet>

ポリシーで参照される my_transform.xsl スタイルシート。次のサンプルに移って、受信した XML メッセージの例をご覧ください。

メッセージ -->

<?xml version="1.0"?>
<list>
  <title>A few of my favorite albums</title>
  <listitem>A Love Supreme</listitem>
  <listitem>Beat Crazy</listitem>
  <listitem>Here Come the Warm Jets</listitem>
  <listitem>Kind of Blue</listitem>
  <listitem>London Calling</listitem>
  <listitem>Remain in Light</listitem>
  <listitem>The Joshua Tree</listitem>
  <listitem>The Indestructible Beat of Soweto</listitem>
</list>

リクエストのサンプル メッセージ(最初のサンプルのポリシーの <Source>request</Source> 要素に表示)。

変換されたメッセージ

<Life>
Here are the odd-numbered items from the list:
1. A Love Supreme
3. Here Come the Warm Jets
5. London Calling
7. The Joshua Tree
</Life>

このサンプルの XSLT スタイルシートが XML メッセージに適用された後の変換されたメッセージ。

<XSL> 要素

XSLTransform ポリシーを定義します。

デフォルト値 なし
必須かどうか 必須
複合オブジェクト
親要素 なし
子要素 <OutputVariable>
<Parameters>
<ResourceURL>
<Source>

<XSL> 要素には次の属性があります。

属性 説明 必須かどうか
name ポリシーの名前。名前に使用できる文字は A-Z0-9._\-$ % のみです。ただし、Apigee UI には追加の制限があり、英数字以外の文字は自動的に削除されます。 必須 文字列

子要素のリファレンス

このセクションでは、<XSL> の子要素について説明します。

<OutputVariable>

変換の出力を格納する変数。この要素をカスタム変数として設定し、その変数を使用する必要があります。

デフォルト値 なし
必須かどうか 省略可
文字列
親要素 <XSL>
子要素 なし

<OutputVariable> の値をメッセージ型にはできません。つまり、messagerequestresponse にはできません。

メッセージの内容を変換の出力に置き換えるには、この要素を削除します。たとえば、メッセージを HTML に変換する場合は、この要素を含めないでください。

<Parameters>

スタイルシートで <xsl:param> 要素のサポートを追加します。各パラメータは、この要素の <Parameter> 子要素として定義されます。

デフォルト値 なし
必須かどうか 省略可
<Parameter> 要素の配列
親要素 <XSL>
子要素 <Parameter>

<Parameters> 要素には次の属性があります。

属性 説明 必須かどうか
ignoreUnresolvedVariables XSLT スクリプトの命令で未解決の変数エラーを無視するかどうかを指定します。デフォルト値は false です。この場合、未解決の変数が見つかると、デフォルトでエラーがスローされます。 省略可 ブール値

<Parameter>

<Parameters> 要素でパラメータを定義します。

デフォルト値 なし
必須かどうか 省略可
複合オブジェクト
親要素 <Parameters>
子要素 なし

<Parameter> 要素には次の属性があります。

属性 必須かどうか 種類 説明
name 必須 文字列

パラメータの名前。Apigee は、ここで設定した値と、スタイルシート内の <xsl:param> 要素の name 属性値を照合します。

たとえば、uid という名前を入力した場合、XSL は次のようになります。

<xsl:param name="uid" select="''"/>
ref 省略可 文字列

パラメータの値を保持するコンテキスト変数を指定します。このポリシーの評価前に、ref コンテキスト変数の値を設定する必要があります。

たとえば、uid パラメータで authn.uid という変数から値を取得する必要がある場合、<Parameter> 要素は次のようになります。

<Parameter name="uid" ref="authn.uid"/>

この属性を使用する場合は、value 属性を使用しないでください。

value 省略可 文字列

パラメータにハードコードされた値を指定します。たとえば、answer という名前のパラメータの値が 42 の場合、<Parameter> 要素は次のようになります。

<Parameter name="answer" value="42"/>

この属性を使用する場合は、ref 属性を使用しないでください。

このパラメータは、ref 属性または明示的な value を使用して値を取得します。

例と詳細については、XSLTransform ポリシーの省略可能パラメータの使用方法をご覧ください。

<ResourceURL>

Apigee がメッセージの変換に使用する XSL ファイル。この要素の値は、API プロキシの /resources/xsl に保存される XSL スタイルシートの名前です。

デフォルト値 なし
必須かどうか 必須
文字列
親要素 <XSL>
子要素 なし

次に例を示します。

<ResourceURL>xsl://SubscriberNumbers-Request.xsl</ResourceURL>

詳しくは、リソース ファイルをご覧ください。

<Source>

変換されるメッセージを指定します。通常、変換するメッセージがインバウンドかアウトバウンドかに応じて、この値は request または response に設定されます。

デフォルト値 なし
必須かどうか 省略可
文字列
親要素 <XSL>
子要素 なし

変換を定義する XSL ファイルは、<ResourceURL> によって定義されます。

  • ソースがない場合は、単純なメッセージとして扱われます。たとえば、<Source>message</Source> のようにします。
  • ソース変数が解決できない場合、またはメッセージ タイプ以外に解決される場合、変換ステップは失敗します。

エラー リファレンス

ランタイム エラー

このエラーは、ポリシーの実行時に発生することがあります。

障害コード HTTP ステータス 原因 修正
steps.xsl.XSLSourceMessageNotAvailable 500 このエラーは、XSLTransform ポリシーの <Source> 要素で指定されたメッセージまたは文字列変数がスコープ外である場合(ポリシーが実行されている特定のフローで使用できない場合)か、解決できない(定義されていない)場合に発生します。
steps.xsl.XSLEvaluationFailed 500 このエラーは、入力 XML ペイロードが使用できないか、不正な形式の場合に発生します。また、XSLTransform ポリシーが XSL ファイルに指定された変換ルールに基づいて入力 XML ファイルを変換できない場合にも発生します。XSLTransform ポリシーは、さまざまな原因で失敗します。エラー メッセージに含まれている失敗の理由から、原因についてより詳しい情報を得ることができます。

デプロイエラー

以下のエラーは、このポリシーを含むプロキシをデプロイするときに発生することがあります。

エラー名 原因 修正
XSLEmptyResourceUrl XSLTransform ポリシーの <ResourceURL> 要素が空の場合、API プロキシのデプロイが失敗します。
XSLInvalidResourceType XSLTransform ポリシーの <ResourceURL> 要素に指定されたリソースタイプが xsl タイプでない場合、API プロキシのデプロイが失敗します。

関連トピック