XSLTransform ポリシー

概要

XSL Transform ポリシーは、カスタム XSLT(Extensible stylesheet language transformations)を XML メッセージに適用します。これにより、XML から別の形式(XML、HTML、プレーン テキストなど)に変換できます。このポリシーは、XML 対応のアプリケーションを統合する際によく使用されていますが、同じデータに対して異なる XML 形式が必要になります。

サンプル

以降のサンプルでは、XSL 変換フローで使用されるリソースを示します。

XSL ポリシー ->

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

単純な XSL ポリシー。次のサンプルに移動して、ポリシーで参照されている XSLT スタイルシート(my_transform.xsl)を確認してください。<Source> 要素は重要です。たとえば、変換する XML がレスポンスにある場合、ソースを 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 Transformation ポリシーを構成します。

フィールド名 説明
Name(必須 ポリシーの名前。名前で使用できる文字は、A-Z0-9._\-$ % です。ただし、管理 UI では追加の制限が設けられています。たとえば、英数字以外の文字は自動的に削除されます。
Source(省略可 情報の抽出元からのメッセージが格納されます。通常、変換するメッセージが受信か送信かによって、この値は request または response に設定されます。
  • source が指定されていない場合、単純なメッセージとして扱われます。例: <Source>メッセージ</Source>
  • source 変数が解決できないか、メッセージ以外のタイプに解決されると、変換ステップが失敗します。
OutputVariable(省略可

変換の出力結果が格納される変数。OutputVariable はメッセージ タイプにできません。つまり、'message'、'request'、'response' にはできません。この要素をカスタム変数に設定し、その変数を使用する必要があります。

メッセージのコンテンツを変換の出力で置き換えるには、この要素を削除します。たとえば、メッセージを HTML に変換する場合は、この要素を使用しないでください。

ResourceURL(必須 メッセージの変換に使用される XSLT ファイル。
Parameters(省略可 ignoreUnresolvedVariables(省略可
XSLT スクリプトの命令で未解決変数のエラーを無視します。
有効な値: true / false
デフォルト値: false
Parameter(省略可 name(必須

Parameters は、スタイルシートでの XSL param の使用を許可します。ポリシーのここで追加した名前が XSL param の名前になります。たとえば、"uid" という名前を入力した場合、XSL は <xsl:param name="uid" select="''"/> のようになります。

param は、コンテキスト変数(ref 属性で指定)の参照または明示的な value により値を取得します。

サンプルと詳細については、http://community.apigee.com/questions/1860/how-should-the-the-optional-parameters-on-the-xsl.html#answer-1864 をご覧ください。

ref(省略可)

変数に格納された値の参照元を指定します。たとえば、"uid" パラメータで、"authn.uid" という変数から値を取得する必要がある場合、Parameter 要素は <Parameter name="uid" ref="authn.uid"/> のようになります。

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

value(省略可)

この属性を使用すると、パラメータの値をハードコートできます。

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


使用上の注意

XSLT はスタンドアロンの .xsl ファイルで実装されます。このファイルは、API プロキシの /resources/xsl に保存されます。XSL ポリシーは XSL ファイルを参照するだけです。詳細については、リソース ファイルをご覧ください。

XSL ポリシーには 2 つの入力が必要です。

  • XSLT スタイルシートの名前。一連の変換ルールが含まれ、API プロキシの /resources/xsl に保存されます。
  • 変換する XML のソース(通常は、リクエストまたはレスポンス メッセージ)

<xsl:include><xsl:import> はサポートされません。

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


エラー リファレンス

XSLT ポリシータイプは、以下のエラーコードを定義します(数字は実行時に挿入される値のプレースホルダを表します)。

エラーコード メッセージ
XSLSourceMessageNotAvailable {0} message is not available for XSL: {1}
XSLEvaluationFailed Evaluation of XSL {0} failed with reason: "{1}"
XSLVariableResolutionFailed Failed to resolve variable {0}
XSLInvalidResourceType XSL {0}: Resource type must be xsl. Context {1}
XSLEmptyResourceUrl Resource Url cannot be empty in XSL {0}

関連トピック