由於第一次寫博客,寫的不好的地方,還請各位大神多多指點,
講解一下:xml動態插入數據並保存,寫這個時候費了我不少勁,最後終於皇天不負有心人讓我搞出來了,特意分享給大家,寫的不完美的地方還請大家多多指點
數據庫表結構
Categoryid GUid自動生成
CategoryName 分類名稱
CategoryIdentifies 分類標示
ParentIdentifies 父標示
Sort 排序
控制器代碼:
public ActionResult CreateCategory(CategoryForm model) { //定義並從xml文件中加載節點(根節點) XElement rootNode = XElement.Load(HttpRuntime.AppDomainAppPath + "Runtime/Category.xml"); IEnumerable<XElement> ele = rootNode.Elements("Controller").Elements("Root"); XElement dnode = rootNode.Elements("Controller").FirstOrDefault(); XElement pElement = null; //判斷xml中是否有root節點 var count = 0; XElement Parentnode = ele.Where(e => ((string)e.Attribute("CategoryName")) == model.CategoryName).FirstOrDefault(); var CategoryIdentifies = 0.0; //判斷當前節點是否存在 if (Parentnode == null) { //判斷是否是父節點 if (model.ParentIdentifies == "0") { //獲取同級父節點的個數 count = ele.Count(); if (count > 0) { CategoryIdentifies = Convert.ToDouble(model.CategoryIdentifies) + count; pElement = new XElement("Root", new XAttribute("CategoryName", model.CategoryName), new XAttribute("CategoryIdentifies", CategoryIdentifies), new XAttribute("ParentIdentifies", "0"), new XAttribute("sort", model.Sort)); dnode.Add(pElement); } else { pElement = new XElement("Root", new XAttribute("CategoryName", model.CategoryName), new XAttribute("CategoryIdentifies", model.CategoryIdentifies), new XAttribute("ParentIdentifies", "0"), new XAttribute("sort", model.Sort)); dnode.Add(pElement); } } else { //獲取同級幾點的個數 count = rootNode.Descendants("Root").Where(e => ((string)e.Attribute("ParentIdentifies")) == model.ParentIdentifies).Count(); //獲取父節點 var sElement = rootNode.Descendants("Root").Where(e => ((string)e.Attribute("CategoryIdentifies")) == model.ParentIdentifies).FirstOrDefault(); if (count == 0) { pElement = new XElement("Root", new XAttribute("CategoryName", model.CategoryName), new XAttribute("CategoryIdentifies", sElement.Attribute("CategoryIdentifies").Value + model.ParentIdentifies), new XAttribute("ParentIdentifies", model.ParentIdentifies), new XAttribute("sort", model.Sort)); sElement.Add(pElement); } else { CategoryIdentifies = Convert.ToDouble(sElement.Attribute("CategoryIdentifies").Value + model.ParentIdentifies) + count; pElement = new XElement("Root", new XAttribute("CategoryName", model.CategoryName), new XAttribute("CategoryIdentifies", CategoryIdentifies), new XAttribute("ParentIdentifies", model.ParentIdentifies), new XAttribute("sort", model.Sort)); sElement.Add(pElement); } } } var id = model.CategoryId = Guid.NewGuid();//生成一個GUID //保存對xml的更改操作 rootNode.Save(HttpRuntime.AppDomainAppPath + "Runtime/Category.xml"); return RedirectToAction("CategoryList"); }
view視圖這塊大家可以自己寫,按照自己的喜好,也可以寫成樹,
xml結果:
注意規則,這個規則是進行查詢用的
<?xml version="1.0" encoding="utf-8"?> <Category> <Controller name="AdminPublish"> <Root CategoryName="etre" CategoryIdentifies="100" ParentIdentifies="0" sort="1"> <Root CategoryName="wet" CategoryIdentifies="100100" ParentIdentifies="100" sort="1"> <Root CategoryName="wetsryerset" CategoryIdentifies="100100100100" ParentIdentifies="100100" sort="1" /> </Root> <Root CategoryName="wetsryer" CategoryIdentifies="100101" ParentIdentifies="100" sort="1" /> <Root CategoryName="wetsryersetewt" CategoryIdentifies="100102" ParentIdentifies="100" sort="1" /> </Root> </Controller> </Category>
我實現的功能是一個產品分類(聯動)查詢
注意這是聯動,這個聯動是根據 ParentIdentifies這個字段進行查詢的,注意查看數據庫表結構規則,和xml規則,有人可能問了,為什麼不直接操作數據庫,卻操作xml,原因很簡單,減少數據庫壓力,在這裡不一一講述了,希望能幫到大家,謝謝