XML文件的生成与读取

从数据库生成:

 

 public static void ToXML(string tablename)
        {
            //获取数据
            string sql = "select * from " + tablename;
            DataTable dt = SqlHelper.GetList(sql);
            //创建xml对象
            XDocument document = new XDocument();
            //创建根节点
            XElement root = new XElement(tablename + "s");
            document.Add(root);
            //遍历表格,添加结点
            foreach (DataRow item in dt.Rows)
            {
                //创建元素节点
                XElement element = new XElement(tablename);
                //设置编号属性(key   value,效果:<user c_id="1"> </user>)
                element.SetAttributeValue(dt.Columns[0].ColumnName, item[0].ToString());//假设0列为主键列
                //将所有列(除编号列外)分别生成子元素(key   value,效果: <c_name>洛杉矶</c_name>)
                for (int i = 1; i < dt.Columns.Count; i++)
                {

                    element.SetElementValue(dt.Columns[i].ColumnName, item[i].ToString());
                }
                root.Add(element);
            }
            //保存生成的xml
            document.Save(tablename+".xml");
        }

 从文件中读取:

 

 public void getXml()
        {
            XDocument document = new XDocument();
            //加载文件
            document = XDocument.Load("Test.xml");
            //读取根节点
            XElement root = document.Root;
           // Console.WriteLine("节点名:"+root.Name+"节点值:"+root.FirstAttribute.Value);
            //加入节点前使用linq to xml的语法判断id是否存在

            int n = root.Elements("student").Where(u => u.Attribute("id").Value == "15" || u.Element("name").Value == "王五").Count();
            if (n > 0)
            {
                Console.WriteLine("id已经存在");
            }
            else 
            {
                XElement element = new XElement("student");
                //设置属性
                element.SetAttributeValue("id", "15");
                //设置节点下的子节点
                element.SetElementValue("name", "王五");
                element.SetElementValue("age", "68");
                //加入到根元素下
                root.Add(element);
                //保存操作
                document.Save("Test.xml");
            }
           
            //循环读取节点内容
            foreach (XElement item in root.Elements())
            {
                Console.WriteLine("节点名:" + item.Name + " 节点属性值:" + item.Attribute("id").Value + " 节点值:" + item.Element("name").Value);
            }
        }

 

XElement n = root.Elements("rootFile").Where(u => u.Attribute("name").Value == "rf").ElementAt(0);

MessageBox.Show(n.Attribute("value").Value);

展示一下子节点的属性值

posted @ 2015-03-16 17:01  洛晨随风  阅读(289)  评论(0编辑  收藏  举报