<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:dp="http://www.datapower.com/extensions"
  extension-element-prefixes="dp"
  xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
>
  <xsl:template match="/response">
    <xsl:variable name="jsonx">
      <json:object
        xsi:schemaLocation="http://www.datapower.com/schemas/json jsonx.xsd"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:json="http://www.ibm.com/xmlns/prod/2009/jsonx"
      >
        <json:object name="response">
          <xsl:apply-templates select="ver|source" mode="number"/>

          <json:array name="data">
            <xsl:apply-templates select="data"/>
          </json:array>
        </json:object>
      </json:object>
    </xsl:variable>

    <xsl:copy-of select="dp:transform('store:///jsonx2json.xsl', $jsonx)"/>
  </xsl:template>
  
  <xsl:template match="data">
    <json:object>
      <xsl:apply-templates select="table" mode="number"/>
      <xsl:apply-templates select="batch" mode="string"/>
    </json:object>
  </xsl:template>
  
  <xsl:template match="*" mode="number">
    <json:number name="{name()}"><xsl:value-of select="."/></json:number>
  </xsl:template>
  
  <xsl:template match="*" mode="string">
    <json:string name="{name()}"><xsl:value-of select="."/></json:string>
  </xsl:template>
</xsl:stylesheet>