在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;

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐