由於第一次寫博客,寫的不好的地方,還請各位大神多多指點,
講解一下: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,原因很簡單,減少數據庫壓力,在這裡不一一講述了,希望能幫到大家,謝謝