Java webservice 传xml_WebService传递XML字符串转义问题
在WebService方法返回XML数据的时候,将XML处理成字符串返回,在flex等客户端得到的XML字符串会出现被转义的情况。一些主要的转义字符如下表: 转义字符 xml特殊字符 符号名< < 小于号> > 大于号& & 和' ' 单引号" " 双引号public string QuerySpsGeoDataFromDB(string projNo){D
在WebService方法返回XML数据的时候,将XML处理成字符串返回,在flex等客户端得到的XML字符串会出现被转义的情况。一些主要的转义字符如下表: 转义字符 xml特殊字符 符号名
< < 小于号
> > 大于号
& & 和
' ' 单引号
" " 双引号public string QuerySpsGeoDataFromDB(string projNo)
{
DataTable table = GeoDataPraser.PraseSps(projNo, "DFOMS", "bgpomsread", "bgpomsread");
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
table.WriteXml(xw, false);
return sw.ToString();
}
在客户端调用得到的字符串如下所示:<?xml version="1.0" encoding="utf-8"?>
<Root><BK TYPE="1"><Point X="20433761" Y="4315303" /><Point X="20447378" Y="4304664" /><Point X="20458731" Y="4319195" /><Point X="20448140" Y="4327470" /><Point X="20446662" Y="4325579" /><Point X="20445401" Y="4326564" /><Point X="20442890" Y="4323349" /><Point X="20441124" Y="4324728" /></BK><BK TYPE="3"><Point X="20435117" Y="4315284" /><Point X="20446717" Y="4306222" /><Point X="20457060" Y="4319460" /><Point X="20448486" Y="4326159" /><Point X="20447008" Y="4324268" /><Point X="20445748" Y="4325253" /><Point X="20443236" Y="4322037" /><Point X="20441471" Y="4323417" /></BK><BK TYPE="4"><Point X="20431827" Y="4315735" /><Point X="20447950" Y="4303139" /><Point X="20460349" Y="4319009" /><Point X="20447253" Y="4329242" /><Point X="20445775" Y="4327350" /><Point X="20444514" Y="4328335" /><Point X="20442002" Y="4325120" /><Point X="20440237" Y="4326499" /></BK><BK TYPE="2"><Point X="20429893" Y="4316167" /><Point X="20448522" Y="4301613" /><Point X="20461968" Y="4318823" /><Point X="20446365" Y="4331013" /><Point X="20444888" Y="4329122" /><Point X="20443627" Y="4330107" /><Point X="20441115" Y="4326892" /><Point X="20439350" Y="4328271" /></BK></Root>
如何在客户端将带有这些转义字符的字符串翻译成标准XML,以Flex为例,可使用替换的方法将转移字符转换成标准XML字符。
解决的办法就是在取出来之后把XML中的特殊字符再转义回去。
代码如下:var reg1:RegExp = /</gi;
str = str.replace(reg1,"
var reg2:RegExp = />/gi;
str = str.replace(reg2,">");
var reg3:RegExp = /'/gi;
str = str.replace(reg3,"'");
var reg4:RegExp = /"/gi;
str = str.replace(reg4,"\"");
var reg5:RegExp = / /gi;
str = str.replace(reg5,"\r");
var reg6:RegExp = /&/gi;
str = str.replace(reg6," ");
var reg7:RegExp = / /gi;
str = str.replace(reg7," ");之所以出现这样的问题,是因为STring类型和XML在webservice序列化过程中的处理方法不同。
如果返回可序列化的标准XML对象,可根本上解决转义问题,对应代码修改为:[WebMethod, SoapHeader("soapHeader")]
public System.Xml.XmlDocument QuerySpsGeoDataFromDB(string projNo)
{
DataTable table = GeoDataPraser.PraseSps(projNo, "DFOMS", "bgpomsread", "bgpomsread");
StringWriter sw = new StringWriter();
XmlTextWriter xw = new XmlTextWriter(sw);
table.WriteXml(xw, false);
System.Xml.XmlDocument xmldoc = new System.Xml.XmlDocument();
xmldoc.LoadXml(sw.ToString());
return xmldoc;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)