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文件給你發過去。
這裏格式太亂了。