Chính sách của XSLT

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
Thông tin

Nội dung

Chính sách Biến đổi XSL áp dụng các biến đổi ngôn ngữ biểu định kiểu mở rộng (XSLT) tuỳ chỉnh cho các thông báo XML, cho phép bạn biến đổi các thông báo đó từ XML sang một định dạng khác, chẳng hạn như XML, HTML hoặc văn bản thuần tuý. Chính sách này thường được dùng để tích hợp các ứng dụng hỗ trợ XML, nhưng yêu cầu các định dạng XML khác nhau cho cùng một dữ liệu.

Mẫu

Các mẫu sau đây cho thấy tất cả tài nguyên trong một luồng chuyển đổi XSL.

Chính sách XSL ->

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

Chính sách XSL đơn giản. Chuyển đến ví dụ tiếp theo để xem biểu định kiểu XSLT được tham chiếu trong chính sách (my_transform.xsl). Phần tử <Source> là phần tử quan trọng. Ví dụ: nếu XML mà bạn muốn chuyển đổi nằm trong phản hồi, thì quá trình chuyển đổi sẽ không diễn ra trừ phi bạn đặt Nguồn thành response (và chính sách được đính kèm vào luồng phản hồi). Nhưng trong trường hợp này, XML cần được chuyển đổi nằm trong yêu cầu.

Biểu định kiểu 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>

Bảng định kiểu my_transform.xsl được tham chiếu trong chính sách. Chuyển đến mẫu tiếp theo để xem ví dụ về một thông báo XML đến.

Thông báo ->

<?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>

Thông báo mẫu trong yêu cầu (được chỉ ra trong phần tử <Source>request</Source> của chính sách trong mẫu đầu tiên).

Tin nhắn đã được biến đổi

<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>

Thông báo đã chuyển đổi sau khi biểu định kiểu XSLT từ các mẫu này được áp dụng cho thông báo XML.


Tham chiếu phần tử

Định cấu hình chính sách Biến đổi XSL bằng các phần tử sau.

Tên trường Mô tả
Tên (Bắt buộc) Tên chính sách. Bạn chỉ có thể sử dụng các ký tự sau trong tên: A-Z0-9._\-$ %. Tuy nhiên, Giao diện người dùng quản lý sẽ áp dụng các hạn chế bổ sung, chẳng hạn như tự động xoá các ký tự không phải là chữ và số.
Nguồn (Không bắt buộc) Chứa thông báo mà bạn cần trích xuất thông tin. Thông thường, giá trị này được đặt thành request hoặc response, tuỳ thuộc vào việc thông báo cần được chuyển đổi là thông báo đến hay đi.
  • Nếu thiếu nguồn, thì thông báo sẽ được coi là một thông báo đơn giản. Ví dụ: <Source>message</Source>
  • Nếu không thể phân giải biến nguồn hoặc phân giải thành một loại không phải thông báo, thì bước chuyển đổi sẽ không thành công.
OutputVariable (Không bắt buộc)

Một biến lưu trữ đầu ra của phép biến đổi. OutputVariable không thể thuộc loại Message, tức là không thể là "message", "request" hoặc "response". Bạn nên đặt phần tử này thành một biến tuỳ chỉnh, rồi sử dụng biến đó.

Để thay thế nội dung thông báo bằng kết quả của quá trình chuyển đổi, hãy xoá phần tử này. Ví dụ: nếu bạn đang chuyển đổi một thông báo sang HTML, đừng thêm phần tử này.

ResourceURL (Bắt buộc) Tệp XSLT sẽ được dùng để chuyển đổi thông báo.
Tham số (Không bắt buộc) ignoreUnresolvedVariables (Không bắt buộc)
Bỏ qua mọi lỗi biến chưa được giải quyết trong các chỉ dẫn của tập lệnh XSLT.
Giá trị hợp lệ: true/false
Giá trị mặc định: false
Tham số (Không bắt buộc) tên (Bắt buộc)

Các tham số hỗ trợ việc sử dụng tham số XSL trong biểu định kiểu, trong đó tên bạn thêm ở đây trong chính sách là tên của tham số XSL. Ví dụ: nếu bạn nhập tên là "uid", thì XSL của bạn có thể có dạng như sau: <xsl:param name="uid" select="''"/>).

Tham số này nhận giá trị từ một tham chiếu đến biến ngữ cảnh (được xác định bằng thuộc tính ref) hoặc bằng một value rõ ràng.

Để xem ví dụ và biết thêm thông tin, hãy xem bài đăng trên thẻ Cộng đồng.

ref (Không bắt buộc)

Chỉ định thông tin tham chiếu lấy giá trị từ một biến. Ví dụ: nếu một tham số "uid" cần lấy giá trị từ một biến có tên là "authn.uid", thì phần tử Tham số sẽ có dạng như sau: <Parameter name="uid" ref="authn.uid"/>

Nếu bạn sử dụng thuộc tính này, đừng sử dụng thuộc tính giá trị.

giá trị (Không bắt buộc)

Bạn có thể sử dụng thuộc tính này để mã hoá cứng giá trị của tham số.

Nếu bạn sử dụng thuộc tính này, đừng sử dụng thuộc tính ref.


Lưu ý về cách sử dụng

XSLT được triển khai trong một tệp .xsl độc lập, được lưu trữ trong proxy API trong /resources/xsl. Chính sách XSL chỉ tham chiếu đến tệp XSL. Hãy xem phần Tệp tài nguyên để biết thêm thông tin.

Chính sách XSL yêu cầu 2 đầu vào:

  • Tên của một biểu định kiểu XSLT (chứa một tập hợp các quy tắc chuyển đổi) được lưu trữ trong proxy API trong /resources/xsl
  • Nguồn của XML cần được chuyển đổi (thường là thông báo yêu cầu hoặc phản hồi)

<xsl:include><xsl:import> không được hỗ trợ.

Apigee Edge dựa vào trình xử lý Saxon XSLT và hỗ trợ XSLT 1.0 và 2.0.


Tham chiếu lỗi

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi thực thi chính sách.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
steps.xsl.XSLSourceMessageNotAvailable 500 Lỗi này xảy ra nếu thông báo hoặc biến chuỗi được chỉ định trong phần tử <Source> của chính sách Chuyển đổi NDK nằm ngoài phạm vi (không có sẵn trong quy trình cụ thể nơi chính sách đang được thực thi) hoặc không thể được giải quyết (không được xác định).
steps.xsl.XSLEvaluationFailed 500 Lỗi này xảy ra nếu tải trọng XML đầu vào không có sẵn/không đúng định dạng hoặc chính sách NDKTransform bị lỗi/không thể chuyển đổi tệp XML đầu vào dựa trên quy tắc chuyển đổi được cung cấp trong tệp NDK. Có thể có nhiều nguyên nhân khác nhau khiến chính sách NDKTransform không thành công. Lý do không thực hiện được trong thông báo lỗi sẽ cung cấp thêm thông tin về nguyên nhân.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.

Tên lỗi Nguyên nhân Khắc phục
XSLEmptyResourceUrl Nếu phần tử <ResourceURL> trong chính sách Chuyển đổi NDK trống, thì quá trình triển khai proxy API sẽ không thành công.
XSLInvalidResourceType Nếu loại tài nguyên được chỉ định trong phần tử <ResourceURL> của chính sách Chuyển đổi NDK không phải thuộc loại xsl thì sẽ không triển khai được proxy API.

Chủ đề có liên quan