我爱编程技术干货程序员

XML格式单引号和双引号拼接问题

2017-04-26  本文已影响0人  我和程序猿的日常

前言:在开发的时候遇到一个问题,一个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 + "\"}"
上一篇下一篇

猜你喜欢

热点阅读