2012年3月22日15:20:27javascript
固然其实,在使用XML 传递数据的时候,开始你们可能由于没有开发过项目的事情,可能都不是很理解,XML在传递数据的时候到底起到了什么做用,这里我不解释 XML的意义和做用以及概念,而是把一个现实咱们的项目的例子拿上来,你们只须要看一下组织结构和读取形式,就能够模仿操做。html
固然 用json加载数据,不管是组织仍是在传递仍是在解析上都比XML 快一些,java
我先把例子呈上来,而后 在说一下 传递的时候应该注意的问题:node
<使用jquery 解析XML数据,asp.net c#语言做为一个后台。>jquery
1 首先是一个方法,用户 接收一个StringBulider参数,用来传递已经XML格式化的文字段。ajax
/// <summary>json
/// 向页面输出xml内容 2011年10月10c#
/// </summary>浏览器
/// <param name="xmlnode">xml内容</param>app
public static void ResponseXML(System.Text.StringBuilder xmlnode)
{
//--首先 对特殊字符进行一个转义
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ContentType = "text/xml";
System.Web.HttpContext.Current.Response.Expires = 0;
System.Web.HttpContext.Current.Response.Cache.SetNoStore();
System.Web.HttpContext.Current.Response.Write(xmlnode.ToString());
System.Web.HttpContext.Current.Response.End();
}
而后 这里是一个 方法结构用于 读取的对象 读取如一个XML结构中。
部分代码
DataTable ds_1 = d_Dal.GetProductInfoList(strWhere, pageSep, int.Parse(pageindex)).Tables[0];
//--将rowcount也会发回去表示具备几页的数据正在加载或是能够加载几页的数据
int datasetRowcount = d_Dal.GetProductInfoListLength(strWhere);
DataRowCollection rowcoll = ds_1.Rows;
if (rowcoll.Count > 0)
{
StringBuilder sb = new StringBuilder();
sb.Append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
sb.Append("<pro>\n");
//那个页面的数据被加载
if (whichpage == "1")
{
foreach (DataRow dr in rowcoll)
{
object[] objs = dr.ItemArray;
sb.Append("<item>\n");
sb.AppendFormat("<id>{0}</id>\n", objs[14]);
sb.AppendFormat("<model>{0}</model>\n", Function.converSpecChar(objs[1]));
sb.AppendFormat("<detail>{0}</detail>\n", Function.converSpecChar(objs[2]));
sb.AppendFormat("<t1>{0}</t1>\n", objs[5]);
sb.AppendFormat("<t2>{0}</t2>\n", objs[6]);
sb.AppendFormat("<t3>{0}</t3>\n", objs[7]);
sb.AppendFormat("<state>{0}</state>\n", objs[4]);
sb.AppendFormat("<order>{0}</order>\n", objs[3]);
sb.AppendFormat("<isdis>{0}</isdis>\n", objs[21]);
//--这一行表示的是具备此数据集中有多少行数据辈加载
sb.Append("</item>\n");
}
}
sb.AppendFormat("<setlength>{0}</setlength>\n", datasetRowcount.ToString());
sb.Append("</pro>\n");
Function.ResponseXML(sb);
你可能感受很奇怪 这个方法
Function.converSpecChar(
其实XML 仍是JSON 都是一种 对特殊字符十分过敏的组织。若是在XML 组织华中 出现了 < > &等字符的话,XML 结构就会错误。
此时 会致使 在客户端接收 XML数据的时候,火狐出现 未组织好,也就是not well fromat 其实就是由于XML数据没有组织好,到那时,咱们告诉浏览器咱们发送的类型是XML System.Web.HttpContext.Current.Response.ContentType = "text/xml";
因此,此时 请注意。
这个方法的原型为
public static string converSpecChar(object inputstring)
{
if (inputstring == null)
return "";
else
return inputstring.ToString().Replace("<", "<").Replace(">", ">").Replace("&", "&").Replace("'", "'").Replace("\"", """);
}
那么在 浏览器端,若是你想在XML中传递已经编码果的HTML标记,那么必须在客户端进行一个相似于上面方法的反转换,
方法以下 是javascript。
function fn_conSpecChar(object)
{ if(object!=null)
return object.replace(/</gi,"<").replace(/>/gi,">").replace(/&/gi,"&").replace(/'/gi,"'").replace(/"/gi,"\\");
else
return "";
}
在组织好以后 调用 Function.ResponseXML(sb);
方法会发给请求源。。。
下面是请求源。在客户端
部分代码
function parseXMLData(xmlObject,model,pageIndex) { var modelType=getPageIndexOrderURL(); if(xmlObject=="noway") { alert("数据组织失败,请联系网站管理员或刷新重试"); return; } var itemLength=0; $("#ajaxLoadArea").html(""); var tableModel=$(model[0]),headerModel=model[1],rowFooter=model[2]; tableModel.append($(headerModel)); if(modelType==1) { itemLength=xmlObject.find("setlength").text();
$("#ajaxLoadArea").append(tableModel).append(getSepData(itemLength,100,pageIndex)); xmlObject.find("item").each(function(index){ var self=$(this); var stateText=getStateText(parseInt(self.find("state").text())); if(self.find("isdis").text()=="True") tableModel.append($("<tr align='center' style='background-color:#EFF3FB;'><td style='display:none'>"+self.find("id").text()+"</td><td align='center' style='width:80px;'>"+self.find("model").text()+"</td><td align='left' style='width:auto;max-width:300px;'>"+fn_conSpecChar(self.find("detail").text())+"</td><td align='center' style='width:50px' >"+self.find("t1").text()+"</td><td align='center' style='width:50px' >"+self.find("t2").text()+"</td><td align='center' style='width:50px' >"+self.find("t3").text()+"</td><td style='width:40px;'>"+stateText+"</td><td style='width:30px;'>"+self.find("order").text()+"</td><td style='width:130px;'><a href='javascript:void(0)' style='color:Gray;font-size:Small;'>上架</a> <a href='javascript:void(0)' style='font-size:Small;'>下架</a> <a href='javascript:void(0)' style='font-size:Small;'>删除</a> </td><td style='width:40px;'><a href='javascript:void(0)'>编辑</a></td></tr>") ); else tableModel.append($("<tr align='center' style='background-color:#EFF3FB;color:gray;'><td style='display:none'>"+self.find("id").text()+"</td><td align='left' style='width:80px;'>"+self.find("model").text()+"</td><td align='left' style='width:auto;max-width:300px;'>"+fn_conSpecChar(self.find("detail").text())+"</td><td align='center' style='width:50px' >"+self.find("t1").text()+"</td><td align='center' style='width:50px' >"+self.find("t2").text()+"</td><td align='center' style='width:50px' >"+self.find("t3").text()+"</td><td style='width:40px;'>"+stateText+"</td><td style='width:30px;'>"+self.find("order").text()+"</td><td style='width:130px;'><a href='javascript:void(0)' style='font-size:Small;'>上架</a> <a href='javascript:void(0)' style='color:gray;font-size:Small;'>下架</a> <a href='javascript:void(0)' style='color:gray;font-size:Small;'>删除</a> </td><td style='width:40px;'><a style='color:gray;font-size:Small;width:40px' href='javascript:void(0)'>编辑</a></td></tr>") ); }); tableModel.append($(rowFooter)); } |
|
|
|
其实很重要的一段代码就是
xmlObject.find("item").each(function(index){
var self=$(this);
var stateText=getStateText(parseInt(self.find("state").text()));
XMLOBJECT 就是接收到的XML数据集,
而后经过XPATH 进行一个循环的查找,而后 在进行组织。。。。
因而这样,,,
2012年3月22日15:36:37
时间仓促,若是仍是不理解,请加发邮箱 violent.22@163.com 我能够把我写的JS文件给你发过去。
这里格式太乱了。