我正在开发一个项目,使用存储过程从数据库中获取数据。数据以 XML 格式返回,如下所示:
<record>
<field name="ID">8f7e-25fbcce2cdc7</field>
<field name="TRANSACTIONSTATUS">202</field>
<field name="TRANSAMT">1.90</field>
<field name="SNDNAME">MR. Jade</field>
<field name="RECVNAME">MR. Lucas</field>
<field name="SNDACCTNUMBER">8224002623</field>
<field name="RECVACCTNUMBER">5666666</field>
</record>
我在 WSO2 EI 中使用 XSLT 转换将此 XML 转换为 JSON 格式。这是我正在使用的 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">
<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:value-of select="$ctDetails/*[local-name()='field'][@name='SNDACCTNUMBER']"/>
</xsl:element>
<xsl:element name="receiveracctnumber">
<xsl:value-of select="$ctDetails/*[local-name()='field'][@name='RECVACCTNUMBER']"/>
</xsl:element>
</xsl:element>
</jsonElement>
</xsl:template>
</xsl:transform>
</localEntry>
我面临的问题是 JSON 输出中数字的格式。例如,SNDACCTNUMBER 和 RECVACCTNUMBER 字段在 JSON 输出中应该是字符串,但它显示为不带引号的数字。这是我得到的 JSON 输出:
{
"transactionId": "M20240425101010101MTBOTS06651000849",
"status": "pending",
"credittrasfer": {
"amount": 1.90,
"sendername": "MR. Jade",
"receivername": "MR. Lucas",
"senderacctnumber": 8224002623, // This should be "8224002623"
"receiveracctnumber": 5666666 // This should be "5666666"
}
}
我在 XSLT 代码中尝试了不同的方法,将数字格式化为 JSON 输出中的字符串,但到目前为止还没有成功。有人可以指导我如何确保使用 XSLT 将 SNDACCTNUMBER 和 RECVACCTNUMBER 等特定字段格式化为 JSON 输出中的字符串吗?
这种行为在 wso2 synapse 引擎中是可以接受的。当 XML 到 json 转换发生时,没有信息来决定原始数据类型是数字还是字符串。因此默认情况下,它将数字视为数字。如果您需要根据需要更改 json 消息,请在将消息转换为 json 后使用 JSON Transform Mediator[1]。请注意,此中介器适用于 EI 660 及以上版本。
[1] https://ei.docs.wso2.com/en/latest/micro-integrator/references/mediators/json-Transform-Mediator/