このページは Apigee と Apigee ハイブリッドに適用されます。
  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><Life></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></Life></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> の値をメッセージ型にはできません。つまり、message、request、response にはできません。
メッセージの内容を変換の出力に置き換えるには、この要素を削除します。たとえば、メッセージを HTML に変換する場合は、この要素を含めないでください。
<Parameters>
  スタイルシートで <xsl:param> 要素のサポートを追加します。各パラメータは、この要素の <Parameter> 子要素として定義されます。
| デフォルト値 | なし | 
| 必須かどうか | 省略可 | 
| 型 | <Parameter>要素の配列 | 
| 親要素 | <XSL> | 
| 子要素 | <Parameter> | 
<Parameters> 要素には次の属性があります。
| 属性 | 説明 | 必須かどうか | 型 | 
|---|---|---|---|
| ignoreUnresolvedVariables | XSLT スクリプトの命令で未解決の変数エラーを無視するかどうかを指定します。デフォルト値は falseです。この場合、未解決の変数が見つかると、デフォルトでエラーがスローされます。 | 省略可 | ブール値 | 
<Parameter>
  <Parameters> 要素でパラメータを定義します。
| デフォルト値 | なし | 
| 必須かどうか | 省略可 | 
| 型 | 複合オブジェクト | 
| 親要素 | <Parameters> | 
| 子要素 | なし | 
<Parameter> 要素には次の属性があります。
| 属性 | 必須かどうか | 種類 | 説明 | 
|---|---|---|---|
| name | 必須 | 文字列 | パラメータの名前。Apigee は、ここで設定した値と、スタイルシート内の  たとえば、 <xsl:param name="uid" select="''"/> | 
| ref | 省略可 | 文字列 | パラメータの値を保持するコンテキスト変数を指定します。このポリシーの評価前に、 たとえば、 <Parameter name="uid" ref="authn.uid"/> この属性を使用する場合は、 | 
| value | 省略可 | 文字列 | パラメータにハードコードされた値を指定します。たとえば、 <Parameter name="answer" value="42"/> この属性を使用する場合は、 | 
このパラメータは、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>要素で指定されたメッセージまたは文字列変数がスコープ外である場合(ポリシーが実行されている特定のフローで使用できない場合)か、解決できない(定義されていない)場合に発生します。 | build | 
| steps.xsl.XSLEvaluationFailed | 500 | このエラーは、入力 XML ペイロードが使用できないか、不正な形式の場合に発生します。また、XSLTransform ポリシーが XSL ファイルに指定された変換ルールに基づいて入力 XML ファイルを変換できない場合にも発生します。XSLTransform ポリシーは、さまざまな原因で失敗します。エラー メッセージに含まれている失敗の理由から、原因についてより詳しい情報を得ることができます。 | build | 
デプロイエラー
以下のエラーは、このポリシーを含むプロキシをデプロイするときに発生することがあります。
| エラー名 | 原因 | 修正 | 
|---|---|---|
| XSLEmptyResourceUrl | XSLTransformポリシーの<ResourceURL>要素が空の場合、API プロキシのデプロイが失敗します。 | build | 
| XSLInvalidResourceType | XSLTransformポリシーの<ResourceURL>要素に指定されたリソースタイプがxslタイプでない場合、API プロキシのデプロイが失敗します。 | build |