你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 JSON 转换为 XML

适用于:所有 API 管理层级

json-to-xml 策略将请求或响应正文从 JSON 转换为 XML。

注意

按照策略声明中提供的顺序设置策略的元素和子元素。 详细了解如何设置或编辑 API 管理策略

策略语句

<json-to-xml 
    apply="always | content-type-json" 
    consider-accept-header="true | false" 
    parse-date="true | false" 
    namespace-separator="separator character"
    namespace-prefix="namespace prefix"
    attribute-block-name="name" />

属性

属性 说明 需要 默认
apply 属性必须设置为以下值之一。

- always - 始终应用转换。
- content-type-json - 仅在响应的 Content-Type 标头指示存在 JSON 的情况下进行转换。

允许使用策略表达式。
空值
consider-accept-header 属性必须设置为以下值之一。

- true - 如果在请求的 Accept 标头中请求了 XML,则应用转换。
- false - 始终应用转换。

允许使用策略表达式。
true
parse-date 设为 false 时,只在转换时简单地复制日期值。 不允许使用策略表达式。 true
命名空间分隔符 用作命名空间分隔符的字符。 允许使用策略表达式。 下划线
namespace-prefix 将属性标识为命名空间特性的字符串,通常为“xmlns”。 名称以指定前缀开头的属性将作为命名空间声明添加到当前元素。 允许使用策略表达式。 空值
attribute-block-name 设置后,命名对象中的属性将会作为属性添加到元素中。 允许使用策略表达式。 未设置

使用情况

  • 策略节:入站、出站、错误时
  • 策略范围:全局、工作区、产品、API、操作
  • 网关:经典、v2、消耗、自承载、工作区

示例

考虑以下策略:

<policies>
    <inbound>
        <base />
    </inbound>
    <outbound>
        <base />
        <json-to-xml apply="always" consider-accept-header="false" parse-date="false" namespace-separator=":" namespace-prefix="xmlns" attribute-block-name="#attrs" />
    </outbound>
</policies>

如果后端返回以下 JSON:

{
  "soapenv:Envelope": {
    "xmlns:soapenv": "http://schemas.xmlsoap.org/soap/envelope/",
    "xmlns:v1": "http://localdomain.com/core/v1",
    "soapenv:Header": {},
    "soapenv:Body": {
      "v1:QueryList": {
        "#attrs": {
          "queryName": "test"
        },
        "v1:QueryItem": {
          "name": "dummy text"
        }
      }
    }
  }
}

对客户端的 XML 响应将为:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v1="http://localdomain.com/core/v1">
  <soapenv:Header />
  <soapenv:Body>
    <v1:QueryList queryName="test">
      <name>dummy text</name>
    </v1:QueryList>
  </soapenv:Body>
</soapenv:Envelope>

有关使用策略的详细信息,请参阅: