您正在查看 Apigee Edge 文档。
前往 Apigee X 文档。 信息
内容
XSLTransform 政策将自定义可扩展样式表语言转换 (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" ver>sio<n="1.0" xsl:o>utp<ut method="text"/> <xsl:vari>abl<e name=&q>uot<;newline">; < xsl:text /xsl:text > /<xsl:vari>&able &xsl<:template> matc<h="/" xsl:textlt;Li>fegt;</xsl:tex>t xsl:value-of select="$newline"</ xsl>:text<Here are the odd-numbered items> from< the list:/xsl:text xsl:value-o>f selec<t="$newline"/ xsl:for->each sele<ct="list/listitem&q>uot; < xsl:if test="(pos>ition() m<od 2) = 1" xsl:num>ber for<mat=&qu>ot;1.< "/ > < xsl:val>&ue-of se&lec<t=".>&<quot;/ > < xsl:value-of s>elect="$newline"/ /xsl:if /xsl:for-each xsl:textlt;/Lifegt;/xsl:text /xsl:template /xsl:stylesheet
政策中引用的 my_transform.xsl 样式表。转到下一个示例以查看传入 XML 消息的示例。
消息 ->
<?xml version=">1<.0&q>uot<;? li>st titleA few of my favor<ite al>bum<s/title > listitemA Lo<ve Suprem>e/l<istitem > listitem<Beat Craz>y/l<istitem > listitemHere Come the< Warm Jet>s/l<istitem > listitemKi<nd of Blu>e/l<istitem > listitemLond<on Callin>g/l<istitem > listitemRemai<n in Ligh>t/l<istitem > listitemThe J<oshua Tre>e/l<istitem > listitemThe Indestructible Beat< of Sowet>o</list>item /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 消息。
元素参考
使用以下元素配置 XSLTransformation 政策。
| 字段名称 | 说明 | |||
|---|---|---|---|---|
| 名称(必填) |
政策的名称。您可以在名称中使用的字符仅限于 A-Z0-9._\-$ %。但是,管理界面会强制执行其他限制,例如自动移除非字母数字字符。
|
|||
| 来源(可选) |
包含需要从中提取信息的消息。通常,此值会设置为 request 或 response,具体取决于要转换的消息是入站还是出站消息。
|
|||
| OutputVariable(可选) |
存储转换输出的变量。OutputVariable 类型不能为消息,也就是说,不能为“message”、“request”或“response”。您应将此元素设为自定义变量,然后再使用该变量。 如需将消息内容替换为转换输出,请删除此元素。例如,如果您要将消息转换为 HTML,请勿添加此元素。 |
|||
| ResourceURL(必需) | 用于转换消息的 XSLT 文件。 | |||
| 参数(可选) | ignoreUnresolvedVariables(可选) |
忽略 XSLT 脚本说明中任何未解决的变量错误。
有效值:true/false
默认值:false
|
||
| 参数(可选) | 名称(必填) |
参数支持在样式表中使用 XSLT 参数,其中,您在政策中添加的名称是 XSLT 参数的名称。例如,如果您输入名称“uid”,则您的 XSL 可能如下所示:( 该参数会通过对上下文变量的引用(由 如需查看示例和了解详情,请参阅社区帖子。 |
||
| ref(可选) |
指定从变量中计算值的引用。例如,如果“uid”参数需要从名为“authn.uid”的变量中获取其值,则参数元素将如下所示: 如果您使用此属性,请勿使用值属性。 |
|||
| 值(可选) |
您可以使用此属性对参数值进行硬编码。 如果您使用此属性,请勿使用 ref 属性。 |
|||
使用说明
XSLT 是在独立的 .xsl 文件中实现的,该文件存储在 API 代理中的 /resources/xsl 下。XSL 政策仅引用 XSL 文件。如需了解详情,请参阅资源文件。
这项 XSL 政策需要两个输入:
- XSLT 样式表的名称(包含一组转换规则)存储在 API 代理的
/resources/xsl下 - 要转换的 XML 的来源(通常是请求或响应消息)
不支持 <xsl:include> 和 <xsl:import>。
Apigee Edge 依赖于 Saxon XSLT 处理器,并支持 XSLT 1.0 和 2.0。
错误参考信息
运行时错误
政策执行时可能会发生这些错误。
| 故障代码 | HTTP 状态 | 原因 | 修复 |
|---|---|---|---|
steps.xsl.XSLSourceMessageNotAvailable |
500 |
如果在 XSL 转换政策的 <Source> 元素中指定的消息或字符串变量不在范围内(在正在执行政策的特定流程中不可用)或无法解析(未定义),就会出现此错误。
|
build |
steps.xsl.XSLEvaluationFailed |
500 | 如果输入 XML 载荷不可用/格式不正确,或者 XSLTransform 政策失败/无法根据 XSL 文件提供的转换规则转换输入 XML 文件,就会出现此错误。很多不同的原因可能会导致 XSLTransform 政策失败。错误消息中的失败原因提供了有关原因的更多信息。 | build |
部署错误
在您部署包含此政策的代理时,可能会发生这些错误。
| 错误名称 | 原因 | 修复 |
|---|---|---|
XSLEmptyResourceUrl |
如果 XSL Transform 政策中的 <ResourceURL> 元素为空,则 API 代理的部署将失败。 |
build |
XSLInvalidResourceType |
如果 XSL Transform 政策的 <ResourceURL> 元素中指定的资源类型不属于 xsl 类型,则 API 代理的部署将失败。 |
build |