js分類中有一節【原生js異步請求,XML解析】主要說明了js前台是如何處理XML格式請求和如何接受由服務器返回的XML數據的解析,今天我將用一個實例來說明具體要如何操作.
前台的參數類型也是XML使用的是jquery:
function test(){ var xmlString ="<bookstore>"+ "<book Type='必修課' ISBN='7-111-19149-2'>"+ "<title>數據結構</title>"+ "<author>嚴蔚敏</author>"+ "<price>30.00</price>"+ "</book></bookstore>"; $.ajax({ type: "post", url: "Hand/Ajax.ashx", data: "strxml="+xmlString, datatype:"xml", success: function(xml){ //根據resultText更新頁面 alert("success"); alert($(xml).find('Table1').find('title').text()); }, error:function(XMLResponse){alert(XMLResponse.responseText)} }); }
前台出入的是XML格式的參數,后台該如何操作呢?這個有針對XML讀寫,這里就簡單的說明一下:
XmlDocument xdoc = new XmlDocument();
//xml字符串操作 xdoc.LoadXml(strxml);//讀取xml字符串strxml
// Add a price element.添加一個節點 XmlElement newElem = doc.CreateElement("price"); newElem.InnerText = "10.95"; doc.DocumentElement.AppendChild(newElem);//添加一個節點
xdoc.Load(fileName);//讀取xml文件fileName是文件的路徑
以上簡單說明LoadXml和Load簡單用法,這里就不做詳細說明。下面是后台處理前台的xml格式的參數
// 得到根節點bookstore XmlNode xn = xdoc.SelectSingleNode("bookstore"); // 得到根節點的所有子節點 XmlNodeList xnl = xn.ChildNodes; // 將節點轉換為元素,便於得到節點的屬性值 XmlElement xe = (XmlElement)(xnl.Item(0)); // 得到Type和ISBN兩個屬性的屬性值 string bookISBN = xe.GetAttribute("ISBN").ToString(); string bookType = xe.GetAttribute("Type").ToString(); // 得到Book節點的所有子節點 XmlNodeList xnl0 = xe.ChildNodes; string bookName = xnl0.Item(0).InnerText; string bookAuthor = xnl0.Item(1).InnerText; double bookPrice = Convert.ToDouble(xnl0.Item(2).InnerText);
后台處理之后,返回xml格式的數據,當然這個前提context.Response.ContentType = "text/xml";
DataSet ds = new DataSet(); ds = GetList(); context.Response.Clear(); context.Response.Write(ds.GetXml());
private DataSet GetList() { DataSet ds = new DataSet(); DataTable dt = new DataTable(); dt.Columns.Add("title"); dt.Columns.Add("author"); dt.Columns.Add("price"); DataRow dr = dt.NewRow(); dr["title"] = "book1"; dr["author"] = "matest"; dr["price"] = 30.01; dt.Rows.Add(dr); ds.Tables.Add(dt); return ds; }
這個是jQuery+Ajax+xml的應用