このページは 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>のようにします。 - ソース変数が解決できない場合、またはメッセージ タイプ以外に解決される場合、変換ステップは失敗します。
エラー リファレンス
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Fix |
|---|---|---|---|
steps.xsl.XSLSourceMessageNotAvailable |
500 |
This error occurs if the message or string variable specified in the <Source> element of the
XSLTransform policy is either out of scope (not available in the specific flow where the
policy is being executed) or can't be resolved (is not defined).
|
build |
steps.xsl.XSLEvaluationFailed |
500 |
This error occurs if the input XML payload is unavailable/malformed or the XSLTransform policy fails/is unable to transform the input XML file based on the transformation rules provided in the XSL file. There could be many different causes for the XSLTransform policy to fail. The reason for failure in the error message will provide more information on the cause. | build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause | Fix |
|---|---|---|
XSLEmptyResourceUrl |
If the <ResourceURL> element in the XSLTransform policy is empty, then the
deployment of the API proxy fails. |
build |
XSLInvalidResourceType |
If the resource type specified in the <ResourceURL> element of the XSLTransform
policy is not of type xsl, then the deployment of the API proxy fails. |
build |