由于第一次写博客,写的不好的地方,还请各位大神多多指点,

讲解一下: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 = ;
XElement Parentnode = ele.Where(e => ((string)e.Attribute("CategoryName")) == model.CategoryName).FirstOrDefault();
var CategoryIdentifies = 0.0;
//判断当前节点是否存在
if (Parentnode == null)
{
//判断是否是父节点
if (model.ParentIdentifies == "")
{ //获取同级父节点的个数
count = ele.Count();
if (count > )
{
CategoryIdentifies = Convert.ToDouble(model.CategoryIdentifies) + count;
pElement = new XElement("Root", new XAttribute("CategoryName", model.CategoryName), new XAttribute("CategoryIdentifies", CategoryIdentifies), new XAttribute("ParentIdentifies", ""), 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", ""), 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 == )
{
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,原因很简单,减少数据库压力,在这里不一一讲述了,希望能帮到大家,谢谢

XML 动态 插入 父类标示 子类标示的更多相关文章

  1. iOS_动态插入或删除行

    终于效果图: 分MVC三层设计;自己定义的Cell有两种;一种是MainCell,由ModelArr提供数据源;还有一种是插入的cell,由代码创建,而且由另外一个数组供状态数据 数据源部分: wat ...

  2. Java实现PDF和Excel生成和数据动态插入以及导出

    一.序言 Excel.PDF的导出.导入是我们工作中经常遇到的一个问题,刚好今天公司业务遇到了这个问题,顺便记个笔记以防下次遇到相同的问题而束手无策. 公司有这么两个需求: 需求一.给了一个表单,让把 ...

  3. Java特性之多态父类与子类之间的调用

    问题描述: Java三大特性,封装.继承.多态,一直没搞懂其中多态是什么,最近研究了一下,关于父类和子类之间的调用.下面是一个测试类,源代码如下: package com.test; public c ...

  4. JavaScript 动态插入 CSS

    写组件时有时想把一些组件特性相关的 CSS 样式封装在 JS 里,这样更内聚,改起来方便.JS 动态插入 CSS 两个步骤就可以 创建一个 style 对象 使用 stylesheet 的 inser ...

  5. java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

    /* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ impo ...

  6. FMDB处理动态插入语句

    昨天做一个需求,参数的数量不确定,所以无法使用这个API: - (BOOL)executeUpdate:(NSString*)sql, ... 但是用 - (BOOL)executeUpdate:(N ...

  7. Sql [hierarchyid]类型如何动态插入层级数据

    [hierarchyid] 是个不错的数据类型,能够方便的操作树型结构,网上找了很多资料没找到如何做到动态插入节点的例子,只好从MSDN认真看了下资料写出了一个DEMO CREATE TABLE Em ...

  8. java父类转子类的一个方法

    一般子类可以转父类.但父类转子类就会报cast error. 使用jsonobject 思想:先把父类转jsonstring 再把jsonstring转子类.剩余的子类值可以设定进去. import ...

  9. P188 实战练习(父类和子类)

    1.创建一个父类,在父类中创建两个方法,在子类中覆盖第二个方法,为子类创建一个对象,将它向上转型到基类并调用这个方法. 创建Computer父类: package org.hanqi.practise ...

随机推荐

  1. Android 知识杂记(MVP模式)

    MVP的模式在于将原来activity中业务逻辑的部分剥离出来,代码示例如下: Account public class Account { private String mUsername; pri ...

  2. SQL Server null知多少?

    null是什么? 不知道.我是说,他的意思就是不知道(unknown). 它和true.false组成谓词的三个逻辑值,代表“未知”.与true和false相比,null最难以令人捉摸,因为它没有明确 ...

  3. ORA-12899: value too large for column (actual: 27, maximum: 20)

    导入数据时报错以下错误,这是因为原来的数据库是GBK的,每个汉字两个字节,但新数据库是UTF-8的,每个汉字是三个字节,导致超过长度了. ORA-12899: value too large for ...

  4. chrome使用技巧(看了定不让你失望)

    写在前面 之前有看过刘哇勇写的Chrome 控制台不完全指南,让我觉得瞬间对chrome的了解实在太浅了.对此特意了解了一番(也就是在他的博文上进行了一些总结和了解一些其它chrome使用方面的诀窍) ...

  5. PowerDesigner最基础的使用方法入门学习

    1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习) 我的PowerDesigner版本是16.5的,如若版本不一样,请自行参考学习即可.(打开软件即是 ...

  6. iOS常见用户头像的圆形图片裁剪常见的几种方法

    在开发中,基本上APP的用户头像的处理都需要把用户所上传的方形图片,处理为圆形图片.在这里就总结三种常见的处理圆形图片的方法. 1.使用位图上下文 2.使用UIView的layer进行处理 3.使用r ...

  7. SQL Server 创建数据库邮件

    一. 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果. 二. 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyicati ...

  8. Android之线程池深度剖析

    1.线程池的引入   引入的好处:   1)提升性能.创建和消耗对象费时费CPU资源   2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多.   使用条件:      假设在一台服务器完成一 ...

  9. Pipedata3d - Welding Neck Flange

    Pipedata3d - Welding Neck Flange eryar@163.com Abstract. Pipedata3d show piping component data in ta ...

  10. 前端学PHP之字符串函数

    × 目录 [1]特点 [2]输出 [3]空格[4]大小写[5]HTML[6]格式化[7]比较 前面的话 字符串的处理和分析在任何编程语言中都是一个重要的基础,往往是简单而重要的.信息的分类.解析.存储 ...