นโยบาย XSLTransform

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

อะไร

นโยบายการแปลง XSL จะใช้การแปลงภาษาชีตสไตล์แบบขยายได้ (XSLT) ที่กำหนดเองกับข้อความ XML ซึ่งช่วยให้คุณแปลงข้อความจาก XML เป็นรูปแบบอื่น เช่น XML, HTML หรือข้อความธรรมดาได้ โดยมักใช้นโยบายนี้เพื่อผสานรวมแอปพลิเคชันที่รองรับ XML แต่ต้องใช้ รูปแบบ XML ที่แตกต่างกันสำหรับข้อมูลเดียวกัน

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงทรัพยากรทั้งหมดในขั้นตอนการแปลง XSL

นโยบาย XSL ->

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

นโยบาย XSL อย่างง่าย ไปที่ตัวอย่างถัดไปเพื่อดูสไตล์ชีต XSLT ที่อ้างอิงใน นโยบาย (my_transform.xsl) องค์ประกอบ <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 การจัดการจะบังคับใช้ข้อจำกัดเพิ่มเติม เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขออกโดยอัตโนมัติ
แหล่งที่มา (ไม่บังคับ) มีข้อความที่ต้องดึงข้อมูล โดยปกติแล้วค่านี้จะตั้งเป็น request หรือ response ขึ้นอยู่กับว่าข้อความที่จะแปลงเป็นข้อความขาเข้าหรือขาออก
  • หากไม่มีแหล่งที่มา ระบบจะถือว่าเป็นข้อความธรรมดา เช่น <Source>ข้อความ</Source>
  • หากไม่สามารถระบุตัวแปรต้นทาง หรือระบุเป็นประเภทที่ไม่ใช่ข้อความ ขั้นตอนการเปลี่ยนรูปแบบจะล้มเหลว
OutputVariable (ไม่บังคับ)

ตัวแปรที่จัดเก็บเอาต์พุตของการเปลี่ยนรูปแบบ OutputVariable ต้องไม่ใช่ประเภทข้อความ ซึ่งก็คือต้องไม่ใช่ "message" "request" หรือ "response" คุณควร ตั้งค่าองค์ประกอบนี้ให้เป็นตัวแปรที่กำหนดเอง แล้วใช้ตัวแปรนั้น

หากต้องการแทนที่เนื้อหาข้อความด้วยเอาต์พุตของการเปลี่ยนรูปแบบ ให้ลบองค์ประกอบนี้ เช่น หากคุณแปลงข้อความเป็น HTML อย่าใส่องค์ประกอบนี้

ResourceURL (ต้องระบุ) ไฟล์ XSLT ที่จะใช้ในการแปลงข้อความ
พารามิเตอร์ (ไม่บังคับ) ignoreUnresolvedVariables (ไม่บังคับ)
ไม่สนใจข้อผิดพลาดของตัวแปรที่ยังไม่ได้รับการแก้ไขในคำสั่งสคริปต์ XSLT
ค่าที่ใช้ได้: จริง/เท็จ
ค่าเริ่มต้น: false
พารามิเตอร์ (ไม่บังคับ) name (ต้องระบุ)

พารามิเตอร์รองรับการใช้พารามิเตอร์ XSL ในชีตสไตล์ โดยชื่อที่คุณเพิ่ม ที่นี่ในนโยบายคือชื่อของพารามิเตอร์ XSL ตัวอย่างเช่น หากคุณป้อนชื่อ "uid" XSL อาจมีลักษณะดังนี้ <xsl:param name="uid" select="''"/>)

พารามิเตอร์จะรับค่าจากการอ้างอิงตัวแปรบริบท (ระบุโดยแอตทริบิวต์ ref) หรือมี value ที่ชัดเจน

ดูตัวอย่างและข้อมูลเพิ่มเติมได้ที่โพสต์ชุมชน

ref (ไม่บังคับ)

ระบุการอ้างอิงที่ดึงค่าจากตัวแปร ตัวอย่างเช่น หากพารามิเตอร์ "uid" ต้องรับค่าจากตัวแปรที่ชื่อ "authn.uid" องค์ประกอบพารามิเตอร์จะมีลักษณะดังนี้ <Parameter name="uid" ref="authn.uid"/>

หากใช้แอตทริบิวต์นี้ อย่าใช้แอตทริบิวต์ค่า

value (ไม่บังคับ)

คุณใช้แอตทริบิวต์นี้เพื่อฮาร์ดโค้ดค่าของพารามิเตอร์ได้

หากใช้แอตทริบิวต์นี้ โปรดอย่าใช้แอตทริบิวต์ ref


หมายเหตุการใช้งาน

XSLT จะใช้งานใน.xsl ไฟล์แบบสแตนด์อโลน ซึ่งจัดเก็บไว้ในพร็อกซี API ภายใต้ /resources/xsl นโยบาย XSL จะอ้างอิงไฟล์ XSL เท่านั้น ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ทรัพยากร

นโยบาย XSL ต้องมีอินพุต 2 รายการ ได้แก่

  • ชื่อของสไตล์ชีต XSLT ซึ่งมีชุดกฎการเปลี่ยนรูปแบบที่จัดเก็บไว้ใน พร็อกซี API ในส่วน /resources/xsl
  • แหล่งที่มาของ XML ที่จะแปลง (โดยปกติคือข้อความคำขอหรือการตอบกลับ)

ไม่รองรับ <xsl:include> และ <xsl:import>

Apigee Edge ใช้โปรเซสเซอร์ Saxon XSLTและรองรับ XSLT 1.0 และ 2.0


ข้อมูลอ้างอิงข้อผิดพลาด

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 XSL Transform 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).
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.

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 XSL Transform policy is empty, then the deployment of the API proxy fails.
XSLInvalidResourceType If the resource type specified in the <ResourceURL> element of the XSL Transform policy is not of type xsl, then the deployment of the API proxy fails.

หัวข้อที่เกี่ยวข้อง