XSLTransform 政策

您正在查看 Apigee Edge 說明文件。
查看 Apigee X 說明文件
資訊

優勢

XSL 轉換政策會為 XML 訊息套用自訂的可擴充樣式表語言轉換 (XSLT),讓您可以將其從 XML 轉換為其他格式,例如 XML、HTML 或純文字。這項政策通常用於整合支援 XML 的應用程式,但同一資料需要不同的 XML 格式。

範例

下列範例顯示 XSL 轉換流程中的所有資源。

XSL 政策 ->

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

簡易 XSL 政策。前往下一個範例,即可查看政策 (my_transform.xsl) 中參照的 XSLT 樣式表。<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 轉換政策。

欄位名稱 說明
名稱 (必填) 政策名稱。名稱中使用的字元僅限 A-Z0-9._\-$ %。不過,管理 UI 會強制執行其他限制,例如自動移除非英數字元。
來源 (選填) 包含需要擷取資訊的訊息。這個值通常會設為 requestresponse,視要轉換的訊息為傳入或傳出訊息而定。
  • 如果缺少來源,系統會將其視為簡單訊息。例如 <Source>message</Source>
  • 如果來源變數無法解析,或解析為非訊息類型,轉換步驟就會失敗。
輸出變數 (選用)

儲存轉換輸出結果的變數。OutputVariable 不得為 Message 類型,也就是不得為「message」、「request」或「response」。您必須將這個元素設為自訂變數,然後使用該變數。

如要將訊息內容替換為轉換的輸出內容,請刪除這個元素。舉例來說,如要將訊息轉換成 HTML,請不要加入這個元素。

ResourceURL (必要項目) 用於轉換訊息的 XSLT 檔案。
參數 (選用) ignoreUnresolvedVariables (選用)
忽略 XSLT 指令碼指示中所有的未解決變數錯誤。
有效值:true/false
預設值為 false。
參數 (選用) 名稱 (必要)

參數可在樣式表中使用 XSL 參數,您在政策中新增的名稱就是 XSL 參數的名稱。舉例來說,如果輸入「uid」的名稱,XSL 可能如下所示:<xsl:param name="uid" select="''"/>

參數的值會從結構定義變數 (由 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 name="uid" ref="authn.uid"/>

如果使用這個屬性,請勿使用 value 屬性。

值 (選填)

您可以使用這項屬性,對參數值進行硬式編碼。

如果使用這個屬性,請勿使用 ref 屬性。


使用須知

XSLT 會在獨立的 .xsl 檔案中實作,該檔案儲存在 API Proxy 中的 /resources/xsl 底下。XSL 政策僅參照 XSL 檔案。詳情請參閱「資源檔案」。

XSL 政策需要輸入兩個資料:

  • XSLT 樣式表的名稱,其中包含一組轉換規則),儲存在 API Proxy 的 /resources/xsl
  • 要轉換的 XML 來源 (通常是要求或回應訊息)

不支援 <xsl:include><xsl:import>

Apigee Edge 依賴 Saxon XSLT 處理器,並支援 XSLT 1.0 和 2.0。


錯誤參考資料

執行階段錯誤

執行政策時,可能會發生這些錯誤。

錯誤代碼 HTTP 狀態 原因 修正
steps.xsl.XSLSourceMessageNotAvailable 500 如果 XSL 轉換政策的 <Source> 元素中指定的訊息或字串變數超出範圍 (不適用於執行政策的特定流程),或是無法解析 (未定義),就會發生這個錯誤。
steps.xsl.XSLEvaluationFailed 500 如果輸入的 XML 酬載無法使用/格式錯誤,或是 XSLTransform 政策失敗/無法依據 XSL 檔案中提供的轉換規則轉換輸入 XML 檔案,就會發生這個錯誤。導致 XSLTransform 政策失敗的原因有很多。錯誤訊息失敗的原因會提供原因詳細資訊。

部署錯誤

若您部署包含這項政策的 Proxy,就可能會發生這些錯誤。

錯誤名稱 原因 修正
XSLEmptyResourceUrl 如果 XSL 轉換政策中的 <ResourceURL> 元素為空白,則 API Proxy 的部署作業會失敗。
XSLInvalidResourceType 如果 XSL 轉換政策的 <ResourceURL> 元素中指定的資源類型不屬於 xsl 類型,API Proxy 的部署就會失敗。

相關主題