You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XSLT将XML转JSON:账号数字格式化为字符串问题求助

解决WSO2 EI中XSLT转换JSON时账号字段转为字符串的问题

问题原因

WSO2 EI的JSON转换器会自动识别XML元素中的数值内容,将其解析为JSON数字类型(不带引号)。但账号这类字段应作为字符串处理,因此需要强制转换器将特定字段视为字符串。

解决方案

在XSLT中使用WSO2提供的json:force-string属性,为需要转为字符串的元素添加该属性并设置为true。具体修改如下:

修改后的XSLT代码

<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="CTDetailsById_Formatter_LE" xmlns="http://ws.apache.org/ns/synapse">
    <xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                   xmlns:json="http://wso2.org/projects/esb/json">
        <xsl:output encoding="UTF-8" indent="yes" method="xml" omit-xml-declaration="yes" version="1.0"/>
        <xsl:template match="/">
            <xsl:variable name="ctDetails" select="//*[local-name()='table']/*[local-name()='record']"/>
            <jsonElement>
                <xsl:element name="transactionId">
                    <xsl:value-of select="$ctDetails/*[local-name()='field'][@name='ID']"/>
                </xsl:element>
                <xsl:element name="status">
                    <xsl:variable name="TrnStatus" select="$ctDetails/*[local-name()='field'][@name='TRANSACTIONSTATUS']"/>
                    <xsl:choose>
                        <xsl:when test="$TrnStatus='202'">
                            <xsl:value-of select="'pending'"/>
                        </xsl:when>
                        <xsl:when test="$TrnStatus='204'">
                            <xsl:value-of select="'initiated'"/>
                        </xsl:when>
                        <xsl:when test="$TrnStatus='203'">
                            <xsl:value-of select="'completed'"/>
                        </xsl:when>
                        <xsl:otherwise/>
                    </xsl:choose>
                </xsl:element>
                <xsl:element name="credittrasfer">
                    <xsl:element name="amount">
                        <xsl:value-of select="$ctDetails/*[local-name()='field'][@name='TRANSAMT']"/>
                    </xsl:element>
                    <xsl:element name="sendername">
                        <xsl:value-of select="$ctDetails/*[local-name()='field'][@name='SNDNAME']"/>
                    </xsl:element>
                    <xsl:element name="receivername">
                        <xsl:value-of select="$ctDetails/*[local-name()='field'][@name='RECVNAME']"/>
                    </xsl:element>
                    <xsl:element name="senderacctnumber">
                        <xsl:attribute name="json:force-string">true</xsl:attribute>
                        <xsl:value-of select="$ctDetails/*[local-name()='field'][@name='SNDACCTNUMBER']"/>
                    </xsl:element>
                    <xsl:element name="receiveracctnumber">
                        <xsl:attribute name="json:force-string">true</xsl:attribute>
                        <xsl:value-of select="$ctDetails/*[local-name()='field'][@name='RECVACCTNUMBER']"/>
                    </xsl:element>
                </xsl:element>
            </jsonElement>
        </xsl:template>
    </xsl:transform>
</localEntry>

关键修改点

  • 引入http://wso2.org/projects/esb/json命名空间,前缀为json。
  • 在senderacctnumber和receiveracctnumber元素中添加json:force-string="true"属性,强制JSON转换器将这些元素的内容视为字符串。

修正后的JSON输出

{
    "transactionId": "M20240425101010101MTBOTS06651000849",
    "status": "pending",
    "credittrasfer": {
        "amount": 1.90,
        "sendername": "MR. Jade",
        "receivername": "MR. Lucas",
        "senderacctnumber": "8224002623",
        "receiveracctnumber": "5666666"
    }
}

内容的提问来源于stack exchange,提问作者Oshada Eranga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:24:52