zoukankan      html  css  js  c++  java
  • C# 操作XML

    1、向文件中写入XML

                XmlDocument xmlDoc = new XmlDocument();//在内存中构建一个Dom对象
                XmlDeclaration xmld = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");//指定文档声明
                xmlDoc.AppendChild(xmld);//将文档说明添加到文档中去
    
                XmlElement rootElement = xmlDoc.CreateElement("school");//创建一个根元素,school
                xmlDoc.AppendChild(rootElement);//将根元素加入进去
    
                XmlElement xmlClassElement = xmlDoc.CreateElement("class");//为根元素(school)添加子元素
                XmlAttribute attr = xmlDoc.CreateAttribute("id");//为class添加属性 id,
                attr.Value = "c01";//id的值为c01
                xmlClassElement.Attributes.Append(attr);//将属性添加到class标签中去。
                rootElement.AppendChild(xmlClassElement);//将class元素添加到school标签中去
    
                XmlElement xmlStudentElement = xmlDoc.CreateElement("student");//创建一个student元素
                attr = xmlDoc.CreateAttribute("sid");//创建一个名叫sid的属性
                attr.Value = "s011";//属性的值为s011
                xmlStudentElement.Attributes.Append(attr); //将属性添加到元素中去
                xmlClassElement.AppendChild(xmlStudentElement);//将student节点加到class节点中去
    
                XmlElement xmlNameElement = xmlDoc.CreateElement("name");
                xmlNameElement.InnerText = "james";
                XmlElement xmlAgeElement = xmlDoc.CreateElement("age");
                xmlAgeElement.InnerText = "18";
                xmlStudentElement.AppendChild(xmlNameElement);
                xmlStudentElement.AppendChild(xmlAgeElement);
    
                xmlDoc.Save("school.xml");//将该Dom对象写入到XML文件中
    兼容.net 2.0版本
                XDocument xDoc = new XDocument();//创建一个Dom对象
                XDeclaration xDeclaration = new XDeclaration("1.0", "utf-8", null);//声明文档类型
                xDoc.Declaration = xDeclaration;//添加文档类型
                XElement rootElement = new XElement("school");//创建根节点
                xDoc.Add(rootElement);//将school节点添加进文档中
                XElement xClass = new XElement("class");//创建一个class元素
                xClass.SetAttributeValue("id", "c01");//为class标签添加属性和值。
                rootElement.Add(xClass);
                XElement student = new XElement("student");
                student.SetAttributeValue("id", "s001");//为student节点设置属性
                student.SetElementValue("Name", "curry");//在student节点中,添加叶子节点Name,值为curry
                student.SetElementValue("age", 17);//在student节点中,添加叶子节点age,值为17
                student.SetElementValue("sex", "male");//在student节点中,添加叶子节点sex,值为male
                xClass.Add(student);//将student节点添加到class节点中去。
                xDoc.Save("xuexiao.xml");//如果这个文件不存在,那么就会创建一个并写入内容。如果这个文件存在,那么就会覆盖掉内容。
    3.5以后的版本

    2、从文件中读取XML

                XmlDocument document = new XmlDocument();//将xml文件加载进来
                document.Load("xuexiao.xml");//将xml文件加载到对象上
                XmlElement rootElement = document.DocumentElement;//获取根节点。
                //rootElement.Name;//获取节点的名字
                foreach (XmlNode item in rootElement.ChildNodes)//遍历根节点下的所有节点(包括注释……等,这些节点有些是实际上用不着的,所有下面需要进行判断)
                {
                    if (item.NodeType == XmlNodeType.Element)
                    {//判断当前节点的类型是否是元素节点
                        string nodeName = item.Name;//获取当前节点的名称
                    }
                    else if (item.NodeType == XmlNodeType.Text | item.NodeType == XmlNodeType.CDATA)
                    {
                        string text = item.InnerText;
                    }
                }
    兼容2.0
                XDocument document = XDocument.Load(@"xuexiao.xml");//加载XML文件
                XElement rootElement = document.Root;//获取根节点
                rootElement.Elements();//获取当前根节点下的所有子元素。如果在elements中增加"class",那么就表明要获取当前节点下的,所有名字叫class的元素
                rootElement.Element("class");//获取当前节点下的,名字叫class的子元素
                //遍历根节点下的所有子元素
                foreach (XElement item in rootElement.Elements())
                {
                    string nodeName = item.Name.ToString();//获取节点的名字
                    item.Attributes();//属性
                    if (item.Elements().Count() == 0)
                    { //如果该节点下没有子节点了。那么就去找该节点的value值
                        string valStr = item.Value;
                    }
                }
                //xml中获取某节点 (3.5以后)
                //获取根节点中,名字叫class的节点,并且这些class的节点的ID都大于10
                IEnumerable<XElement> items = rootElement.Descendants("class").Where(x => Convert.ToInt32(x.Attribute("id").Value) > 10);
    3.5以后
     public List<ViewModelSelect> GetFunctionNameWithXML(string strPath)
            {
                List<ViewModelSelect> listVms = new List<ViewModelSelect>();
                XDocument document = XDocument.Load(strPath);//加载XML文件
                XElement rootElement = document.Root;//获取根节点
                GetXElement(rootElement, ref listVms);
                return listVms;
            }
            private void GetXElement(XElement root, ref  List<ViewModelSelect> listVms)
            {
                //返回IEnumerable接口的对象,都可以实现foreach循环遍历
                foreach (XElement element in root.Elements())
                {
                    //递归
                    if (element.Elements().Count() > 0)
                    {
                        GetXElement(element, ref listVms);
                    }
                    else
                    {
                        ViewModelSelect vms = new ViewModelSelect();
                        vms.ModelName = element.Value;
                        vms.Fac = element.FirstAttribute.Value;
                        listVms.Add(vms);
                    }
                }
            }
    3.5以后,递归获取XML节点内容
    如果xml文件是导航节点,那么在获取到根节点之后,写一个递归,然后调用递归就可以了。
  • 相关阅读:
    bzoj3033
    noip2016 Day1T3
    编译php的问题
    JavaScript <script>标签的位置、延迟脚本(defer属性)与 异步脚本(async属性)
    连接远程数据库时出现 SSH: expected key exchange group packet from server / 2003
    laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
    laravel 生成 key
    windows下apache配置虚拟主机
    composer设置忽略版本匹配
    laravel 服务容器实例——深入理解IoC模式
  • 原文地址:https://www.cnblogs.com/vichin/p/8215612.html
Copyright © 2011-2022 走看看