XSLTransform 政策

您正在查看的是 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" 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 消息。


元素参考

使用以下元素配置 XSLTransformation 政策。

字段名称 说明
名称(必填 政策的名称。您可以在名称中使用的字符仅限于 A-Z0-9._\-$ %。不过,管理界面会施加其他限制,例如自动移除非字母数字字符。
来源(可选) 包含需要从中提取信息的消息。通常,此值会设置为 requestresponse,具体取决于要转换的消息是入站还是出站消息。
  • 如果缺少源,则将其视为简单消息。例如,<Source>message</Source>
  • 如果源变量无法解析或解析为非消息类型,则转换步骤将失败。
OutputVariable(可选

存储转换输出的变量。OutputVariable 类型不能为消息,也就是说,不能为“message”、“request”或“response”。您应将此元素设为自定义变量,然后再使用该变量。

如需将消息内容替换为转换输出,请删除此元素。例如,如果您要将消息转换为 HTML,请勿添加此元素。

ResourceURL(必需 用于转换消息的 XSLT 文件。
参数(可选) ignoreUnresolvedVariables(可选
忽略 XSLT 脚本指令中任何未解决的变量错误。
有效值:true/false
默认值:false
参数(可选 名称(必填

参数支持在样式表中使用 XSLT 参数,其中,您在政策中添加的名称是 XSLT 参数的名称。例如,如果您输入名称“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"/>

如果您使用此属性,请勿使用值属性。

值(可选)

您可以使用此属性对参数值进行硬编码。

如果您使用此属性,请勿使用 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> 元素中指定的消息或字符串变量不在范围内(在正在执行政策的特定流程中不可用)或无法解析(未定义),就会出现此错误。
steps.xsl.XSLEvaluationFailed 500 如果输入 XML 载荷不可用/格式不正确,或者 XSLTransform 政策失败/无法根据 XSL 文件提供的转换规则转换输入 XML 文件,就会出现此错误。很多不同的原因可能会导致 XSLTransform 政策失败。错误消息中的失败原因提供了有关原因的更多信息。

部署错误

在您部署包含此政策的代理时,可能会发生这些错误。

错误名称 原因 修复
XSLEmptyResourceUrl 如果 XSL Transform 政策中的 <ResourceURL> 元素为空,则 API 代理的部署将失败。
XSLInvalidResourceType 如果 XSL Transform 政策的 <ResourceURL> 元素中指定的资源类型不属于 xsl 类型,则 API 代理的部署将失败。

相关主题