0

我正在使用 ibm datapower 向 api 发送发布请求。我正在使用 url-open 标记来发送帖子,但我在使用 json 有效负载时遇到了问题。理想情况下,我想做这样的事情:

<xsl:stylesheet xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx" version="1.0">
  <dp:url-open target="{$url}">
    <json:object>
      <json:string name="key">value</json:string>
    </json:object>
  </dp:url-open>
</xsl:stylesheet>

但如果我这样做,我会收到一个非法的 char '{' 错误,因为 json 没有被字符串化。如果我做:

<xsl:variable name="payload">{"key": "value"}</xsl:variable>
<dp:url-open target="{$url}">
    <xsl:value-of select="$payload" />
</dp:url-open>

它按预期工作,但不是很动态,因为我必须对字符串化对象进行硬编码。有没有办法按照第一个示例创建 json 对象,然后在发送请求之前进行字符串化?

任何想法都非常感谢

C

4

2 回答 2

0

将 dp:transform() 用于“store:///jsonx2json.xsl”是一种不好的做法。带有该样式表的 xform 操作的输出应直接转到 OUTPUT 上下文。原因是 JSON 和 XML 转义的区别。使用 dp:transform() 您很可能会遇到此类转义问题,因为结果 JSON 将作为 XML 字符串处理。

赫尔曼。

于 2015-12-13T11:21:17.020 回答
0

DataPower 附带一个名为 store:///jsonx2json.xsl 的样式表,您可以使用它进行转换。像这样:

<xsl:variable name="jsonx">
    <json:object>
        <json:string name="key">value</json:string>
    </json:object>
</xsl:variable>

<xsl:variable name="json">
    <xsl:copy-of select="dp:transform('store:///jsonx2json.xsl', $jsonx)"/>
</xsl:variable>

<dp:url-open target="{$url}">
    <xsl:value-of select="$json" />
</dp:url-open>
于 2015-12-08T22:08:59.400 回答