前言:在开发的时候遇到一个问题,一个xml格式的请求数据其中一个字段拼接的是json格式的数据,json数据里面的双引号导致xml格式错误,导致服务端解析错误。
错误请求代码
<Request T="101" T1="1" C="0" Version="8.1.20160817001" UserName="yzc" PassWord="1" Type="0" MobileType="HUAWEI VNS-AL00" Imei="862268034454116" AndroidVersion="6.0" SIMCardInfo="{"netWorkType":"0","phoneType":"1","dataState":"0","simState":"1","subScriberId":"null"}" SDCardSize="10.4GB" SDCardAvailSize="3.1GB" />
有经验的人看到这个请求应该就会发现错误的地方
SIMCardInfo="{"netWorkType":"0","phoneType":"1","dataState":"0","simState":"1","subScriberId":"null"}"
字段内部的双引号会引起xml解析错误,正常情况下xml根据双引号的位置只能解析SIMCardInfo="{",导致后面的数据没有正确的双引号标识解析错误
我们既要保证json内部数据正确,还要保证整个xml请求数据正确,所以特殊情况就要特殊对待
解决方法
1、如果内容中有单引号,就用双引号括起来,如果内容中有双引号,就用单引号括起来。
<example content1="内容有单引号'用双引号括起来" content2='内容有双引号"用单引号括起来' />
所以按照这种方法,上述请求可以转换为这样
<Request T="101" T1="1" C="0" Version="8.1.20160817001" UserName="yzc" PassWord="1" Type="0" MobileType="HUAWEI VNS-AL00" Imei="862268034454116" AndroidVersion="6.0" SIMCardInfo='{"netWorkType":"0","phoneType":"1","dataState":"0","simState":"1","subScriberId":"null"}' SDCardSize="10.4GB" SDCardAvailSize="3.1GB" />
2、使用转义字符替换
<Request T="101" T1="1" C="0" Version="8.1.20160817001" UserName="yzc" PassWord="1" Type="0" MobileType="HUAWEI VNS-AL00" Imei="862268034454116" AndroidVersion="6.0" SIMCardInfo="{"netWorkType":"0","phoneType":"1","dataState":"0","simState":"1","subScriberId":"null","networkCountryIso":""}" SDCardSize="10.4GB" SDCardAvailSize="3.1GB"/>
我们在代码编写的时候,经常需要拼接带有双引号字符串,我们也可以使用“\”转义
"{\"simOperator\":\"" + simOperator + "\",\"netWorkType\":\"" + netWorkType + "\",\"phoneType\":\"" + phoneType + "\",\"dataState\":\"" + dataState + "\",\"simState\":\"" + simState+ "\",\"subScriberId\":\"" + subScriberId + "\",\"networkCountryIso\":\"" + networkCountryIso + "\"}"