Stringify化嵌套在url-open标记内的jsonx对象

时间:2015-11-30 10:47:14

标签: xslt ibm-datapower jsonx

我正在使用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>

但是,如果我这样做的话,我会得到一个非法的字母&#39; {&#39;错误,因为json没有被字符串化。如果我这样做:

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

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

任何想法都非常感激

C

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

赫尔曼。