הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של
Apigee Edge
מדיניות XSLTransform מחילה טרנספורמציות מותאמות אישית של שפת גיליונות סגנונות (XSLT) על הודעות XML, ומאפשרת לכם להמיר אותן מ-XML לפורמט אחר, כמו HTML או טקסט פשוט. המדיניות הזו משמשת לעיתים קרובות לשילוב אפליקציות שתומכות ב-XML, אבל נדרשים בהן פורמטים שונים שמבוססים על XML לאותם נתונים.
המדיניות הזו היא מדיניות שניתנת להרחבה, והשימוש בה עשוי להשפיע על העלויות או על הניצול, בהתאם לרישיון שלכם ל-Apigee. למידע על סוגי מדיניות והשלכות השימוש, אפשר לעיין במאמר בנושא סוגי מדיניות.
קלט
מדיניות ה-XSL מקבלת את הקלט הבא:
- (חובה) השם של גיליון סגנונות XSLT, שמכיל קבוצה של כללי המרה שמאוחסנים ב-proxy ל-API בנתיב
/resources/xsl. - (חובה) ה-XML שצריך להמיר (בדרך כלל בקשה או הודעת תגובה).
- (אופציונלי) השם של משתנה שבו מאוחסן הפלט.
- (אופציונלי) פרמטרים שתואמים לפרמטרים בגיליון הסגנונות של XSL.
מעבד ניתוח
Apigee מסתמך על מעבד Saxon XSLT ותומך ב-XSLT 1.0 וב-XSLT 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 stylesheet -->
<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 אוכף הגבלות נוספות,
כמו הסרה אוטומטית של תווים שהם לא אלפאנומריים. |
חובה | String |
הפניה לרכיב צאצא
בקטע הזה מתוארים רכיבי הבן של <XSL>.
<OutputVariable>
משתנה שמאחסן את הפלט של הטרנספורמציה. כדאי להגדיר את הרכיב הזה כמשתנה מותאם אישית, ואז להשתמש במשתנה הזה.
| ערך ברירת המחדל | לא רלוונטי |
| חובה? | אופציונלי |
| סוג | String |
| רכיב אב |
<XSL>
|
| רכיבי צאצא | ללא |
הערך של <OutputVariable> לא יכול להיות מסוג message, כלומר הוא לא יכול להיות message, request או response.
כדי להחליף את תוכן ההודעה בפלט של ההמרה, צריך למחוק את האלמנט הזה: . לדוגמה, אם ממירים הודעה ל-HTML, לא כוללים את האלמנט הזה: .
<Parameters>
הוספת תמיכה ברכיב <xsl:param> בגיליונות הסגנונות. מגדירים כל פרמטר כרכיב צאצא <Parameter> של הרכיב הזה.
| ערך ברירת המחדל | לא רלוונטי |
| חובה? | אופציונלי |
| סוג | מערך של <Parameter> אלמנטים |
| רכיב אב |
<XSL>
|
| רכיבי צאצא |
<Parameter> |
לרכיב <Parameters> יש את המאפיינים הבאים:
| מאפיין | תיאור | חובה? | סוג |
|---|---|---|---|
ignoreUnresolvedVariables |
קובעת אם המדיניות מתעלמת משגיאות של משתנים לא פתורים בהוראות של סקריפט XSLT. ערך ברירת המחדל הוא false, כלומר כברירת מחדל המדיניות תציג שגיאות אם היא תיתקל במשתנים לא פתורים. |
אופציונלי | בוליאני |
<Parameter>
מגדיר פרמטר ברכיב <Parameters>.
| ערך ברירת המחדל | לא רלוונטי |
| חובה? | אופציונלי |
| סוג | אובייקט מורכב |
| רכיב אב |
<Parameters>
|
| רכיבי צאצא | ללא |
לרכיב <Parameter> יש את המאפיינים הבאים:
| מאפיין | חובה? | סוג | תיאור |
|---|---|---|---|
name |
חובה | String |
שם הפרמטר. מערכת Apigee משווה את הערך שהגדרתם כאן לערך של המאפיין לדוגמה, אם תזינו שם של <xsl:param name="uid" select="''"/> |
ref |
אופציונלי | String |
מצביע על משתנה הקשר שמכיל את הערך של הפרמטר. צריך להגדיר ערכים למשתני ההקשר לדוגמה, אם פרמטר <Parameter name="uid" ref="authn.uid"/> אם משתמשים במאפיין הזה, אסור להשתמש במאפיין |
value |
אופציונלי | String |
מציינים ערך מקודד לפרמטר. לדוגמה, אם לפרמטר בשם <Parameter name="answer" value="42"/> אם משתמשים במאפיין הזה, אסור להשתמש במאפיין |
הפרמטר מקבל את הערך שלו מהמאפיין ref או עם value מפורש.
דוגמה ומידע נוסף זמינים במאמר איך צריך להשתמש בפרמטרים האופציונליים במדיניות XSL Transform?
<ResourceURL>
קובץ ה-XSL שמשמש את Apigee לשינוי ההודעה. הערך של הרכיב הזה הוא השם של גיליון הסגנונות XSL שמאוחסן ב-proxy ל-API בנתיב /resources/xsl.
| ערך ברירת המחדל | לא רלוונטי |
| חובה? | חובה |
| סוג | String |
| רכיב אב |
<XSL>
|
| רכיבי צאצא | ללא |
לדוגמה:
<ResourceURL>xsl://SubscriberNumbers-Request.xsl</ResourceURL>
מידע נוסף זמין במאמר בנושא קובצי משאבים.
<Source>
מציינת את ההודעה שעוברת המרה. בדרך כלל הערך הזה מוגדר כ-request או כ-response, בהתאם לכך שההודעה שצריך לשנות היא דואר נכנס או דואר יוצא.
| ערך ברירת המחדל | לא רלוונטי |
| חובה? | אופציונלי |
| סוג | String |
| רכיב אב |
<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 |