当前位置: 首页 > article >正文

C#__简单了解XML文档

 

        /*
        XML(可扩展标记语言):用于传输和存储数据
        XML文档:树结构;包含根元素
        XML元素:从开始标签到结束标签的部分
        
        XML语法规则:
        1、所有XML元素都必须有结束标签
        2、XML标签对字母大小写敏感
        3、XML必须正确嵌套
        4、必须有根元素
        5、XML的属性值必须加引号
        
        XML中的注释:
        <!-- This is a comment -->

        XML的命名规则:
        名称可以含字母、数字以及其他字符
        名称不能以数字或标点符号开始
        名称不能以字符“Xml、xml、XML”开始
        名称不能包含空格

        可以使用任何名称(没有保留的字词)
         */

 

 // Skill.xml

<?xml version="1.0" encoding="utf-8" ?> 
<skills>
	<skill>
		<id> 1 </id>
		<name lang ="cn">大慈大悲手</name>
		<damage>166</damage>
	</skill>
	<skill>
		<id> 2 </id>
		<name lang ="cn">佛落掌</name>
		<damage>366</damage>
	</skill>
	<skill>
		<id> 3 </id>
		<name lang ="cn">如来</name>
		<damage>666</damage>
	</skill>
</skills>

// Skill.cs 

    class Skill
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Lang { get; set; }
        public int Damage { get; set; }
    }

 

// Program.cs

       static void Main(string[] args)
        {
            List<Skill> list = new List<Skill>(); //将Skill类的数据放入实例化的列表中
            XmlDocument xmlDoc = new XmlDocument(); //实例化一个xml文档类型
            //路径加载方法
            xmlDoc.Load(@"F:\C#编程\XML uesr\Skills.xml");

            //字符串加载方法
            //xmlDoc.LoadXml(File.ReadAllText("Skills.xml"));

            //获取1号子节点,注意:0是声明
            XmlNode root0 = xmlDoc.ChildNodes[0];
            XmlNode root = xmlDoc.ChildNodes[1];

            Console.WriteLine(root0.Name);  // xml
            Console.WriteLine(root.Name);  // skills

            //获取root的所有子节点
            XmlNodeList skillList = root.ChildNodes;

            foreach(XmlNode skill in skillList)
            {
                // xml获取子节点和属性值方案一
/*               Skill skillObj = new Skill();

                XmlElement idEle = skill["id"];
                skillObj.ID = Int32.Parse(idEle.InnerText);

                XmlElement nameEle = skill["name"];
                skillObj.Name = nameEle.InnerText;

                XmlAttributeCollection attriCol = nameEle.Attributes;
                XmlAttribute attri = attriCol["lang"];
                skillObj.Lang = attri.Value;

                XmlElement damageEle = skill["damage"];
                skillObj.Damage = Int32.Parse(damageEle.InnerText);

                list.Add(skillObj);*/


                // xml获取子节点和属性值方案二
                Skill skillObj = new Skill();
                foreach (XmlNode node in skill.ChildNodes)
                {
                    // Console.WriteLine(node.Name + ":" + node.InnerText);
                    /*
                     * id: 1
                     * name: 大慈大悲手
                     *damage:166
                     *id: 2
                     *name: 佛落掌
                     *damage:366
                     *id: 3
                     *name: 如来
                     *damage:666
                     */
                    if (node.Name == "id")
                    {
                        // 将数字的字符串表示形式转换为它的等效 32 位有符号整数。
                        skillObj.ID = Int32.Parse(node.InnerText);
                    }
                    else if(node.Name == "name")
                    {
                        // 获取或设置节点及其所有子节点的串连值。
                        skillObj.Name = node.InnerText;
                        // 获取 System.Xml.XmlAttributeCollection 包含此节点的属性。
                        skillObj.Lang = node.Attributes[0].Value;
                    }
                    else
                    {
                        skillObj.Damage = Int32.Parse(node.InnerText);
                    }
                }
                
                // 将skillObj的值依次存入列表
                list.Add(skillObj);
            }

            foreach (Skill s in list)
            {
                Console.WriteLine(s.ID + "," + s.Name + "," + s.Lang + "," + s.Damage);
                /*1,大慈大悲手,cn,166
                2,佛落掌,cn,366
                3,如来,cn,666*/
            }
        }

// 结果

 


http://www.kler.cn/news/109014.html

相关文章:

  • 谈谈我对 Reacitive 方法的理解
  • Java开发中方法命名规范
  • NCCL后端
  • 面试测试工程师一般问什么问题?
  • 【Java】选择语句、循环语句
  • Mybatisplus 常用注解
  • Elasticsearch跨集群检索配置
  • Linux C/C++ 实现网络流量分析(性能工具)
  • 海外问卷调查是怎么做的?全方位介绍!
  • 【Git】HEAD detached from xxx 问题及解决方案
  • Hive创建分区表并插入数据
  • bat文件学习
  • 基于STM32的示波器信号发生器设计
  • LeetCode 917 仅仅反转字母 简单
  • GnuTLS recv error (-110): The TLS connection was non-properly terminated
  • C#学习相关系列之多线程(七)---Task的相关属性用法
  • 算法训练|数据流中的中位数
  • Visual Studio Code的下载与安装
  • 电脑提示由于找不到vcruntime140.dll文件,教你四个解决方案
  • 中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料
  • Postgresqlddl在事务中可以回滚,truncate时relfilenode在当前会话会改变
  • Linux命令解压多个tar.gz包
  • rust学习
  • 关于错误javax.net.ssl.SSLException: Received close_notify during handshake
  • 腾讯云轻量应用服务器地域怎么选择比较好?
  • 两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称,根据属性名称处理两个list
  • 程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991, UVa210)rust解法
  • java集合之List接口实现类常用方法详解
  • Gitee 发行版
  • 【音视频】Linux | FFmpeg源码搭建