このページの内容は 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 |