【C#】XML的基础知识以及读取XML文件

news2024/12/26 11:24:25

最近在学读取文件

目录

    • 介绍
      • 特点
      • 结构
      • XML的语法规则
      • XML 命名规则
    • C#操作XML
      • 新建
      • 读取
        • 第一种
        • 第二种
        • 第三种
      • 读取属性


介绍

XML (可扩展标记语言,eXtensible Markup Language) 是一种标记语言,它被设计用来传输和存储数据。

特点

  • 可扩展性:由于 XML 的语法灵活,可以通过定义新的标记和属性来扩展其功能。
  • 可读性:XML 的语法结构使其易于阅读和理解。
  • 平台无关性:XML 可以在不同的平台上被处理和解析,如 Windows、Linux、MacOS 等。
  • 编码规范:XML 规定了严格的语法和编码规范,确保数据的正确解析。

结构

一个简单的XML文档展示:
在这里插入图片描述

第一行是 XML 声明,它定义 XML 的版本和所使用的编码),然后是根元素,然后是根元素的子元素(当然,可以继续嵌套)

XML的结构由标签元素属性文本组成。

  • 标签(tag):以尖括号(< >)包围的单词或词组,用来起始和结束元素。

  • 元素(element):指标签包含的整个内容。元素通常由开始标签和结束标签组成,有时也可以是自封闭的标签。

  • 属性(attribute):定义在开始标签内的附加信息。属性是由名称和值组成的,它们用空格隔开。

  • 文本(text):元素内部不包含标签的部分。文本可以包含实际的数据或者说明信息。

在这里插入图片描述

XML的语法规则

  • XML文档必须有一个根元素,该元素是所有其他元素的父元素。
  • XML元素的开始标签和结束标签要成对出现。
  • XML标签名严格区分大小写。
  • XML属性必须在开始标签中定义,并且属性名和属性值必须用等号(=)分隔。
  • XML属性值必须用引号(" 或 ')括起来。
  • XML的注释 < !-- 这是注释内容 – >。
  • XML文档必须符合XML规范,即必须包含声明。

XML 命名规则

  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

C#操作XML

新建

  • 添加—>类
    在这里插入图片描述

  • 选择XML文件->输入一个名称->点击添加在这里插入图片描述

  • 输入内容就可以了!!

<?xml version="1.0" encoding="utf-8" ?>
<person>
	<person p="man">
		<name>LiHua</name>
		<age>18</age>
		<height>172</height>
	</person>
	<person p="woman">
		<name>Ling</name>
		<age>18</age>
		<height>168</height>
	</person>
</person>

有了这个XML文件之后,接下来,我们可以对它进行一些操作了!!


读取

第一种

在这里插入图片描述

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace _02_XML操作
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load("Person.xml");

            XmlNode root = xmlDoc.ChildNodes[1];
            XmlNodeList personList = root.ChildNodes;
            foreach (XmlNode person in personList)
            {
                foreach (XmlNode node in person.ChildNodes)
                {
                    Console.WriteLine(node.Name + ":" + node.InnerText);
                }
            }
        }
    }
}

运行结果:
在这里插入图片描述


第二种

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace _02_XML操作
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(File.ReadAllText("Person.xml"));

            XmlNode root = xmlDoc.ChildNodes[1];
            XmlNodeList personList = root.ChildNodes;
            foreach(XmlNode person in personList)
            {
                Person obj = new Person();
                foreach(XmlNode node in person.ChildNodes)
                {
                    if (node.Name == "name")
                    {
                        obj.name = node.InnerText;
                    }else if (node.Name == "age")
                    {
                        obj.age = Int32.Parse(node.InnerText);
                    }else if (node.Name == "height")
                    {
                        obj.height = Int32.Parse(node.InnerText);
                    }
                }
                list.Add(obj);
            }
            foreach(Person p in list)
            {
                Console.WriteLine(p.name + "," + p.age + "," + p.height);
            }
        }
    }
}

运行结果:
在这里插入图片描述


第三种

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace _02_XML操作
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(File.ReadAllText("Person.xml"));

            XmlNode root = xmlDoc.ChildNodes[1];
            XmlNodeList personList = root.ChildNodes;
            foreach(XmlNode person in personList)
            {
                Person obj = new Person();
                XmlElement nameEle = person["name"];
                obj.name = nameEle.InnerText;
                XmlElement ageEle = person["age"];
                obj.age = Int32.Parse(ageEle.InnerText);
                XmlElement heightEle = person["height"];
                obj.height = Int32.Parse(heightEle.InnerText);

                list.Add(obj);
            }
            foreach(Person p in list)
            {
                Console.WriteLine(p.name + "," + p.age + "," + p.height);
            }
        }
    }
}

运行结果:
在这里插入图片描述

读取属性

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml;

namespace _02_XML操作
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(File.ReadAllText("Person.xml"));

            XmlNode root = xmlDoc.ChildNodes[1];
            XmlNodeList personList = root.ChildNodes;
            foreach(XmlNode person in personList)
            {
                Person obj = new Person();

                //读取属性
                XmlAttributeCollection attriCol = person.Attributes;
                XmlAttribute attri = attriCol["p"];
                obj.p = attri.Value;

  
                XmlElement nameEle = person["name"];
                obj.name = nameEle.InnerText;


                XmlElement ageEle = person["age"];
                obj.age = Int32.Parse(ageEle.InnerText);
                XmlElement heightEle = person["height"];
                obj.height = Int32.Parse(heightEle.InnerText);

                list.Add(obj);
            }
            foreach(Person p in list)
            {
                Console.WriteLine(p.p+","+p.name + "," + p.age + "," + p.height);
            }
        }
    }
}

运行结果:
在这里插入图片描述


💦更多内容请前往主页置顶或点击链接直达:
【unity3D】游戏开发专栏的目录

【VR】VR开发专栏的目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1020813.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++---异常处理

异常处理 异常处理try语句块和throw表达式异常的抛出和捕获异常的抛出和匹配原则 异常安全异常规范标准异常 异常处理 异常是指存在于运行时的反常行为&#xff0c;这些行为超出了函数正常功能的范围。当程序的某部分检测到一个他无法处理的问题时&#xff0c;需要用到异常处理…

港联证券:停牌后复牌股价怎么算?

股票停牌是指买卖所或证券公司暂停一只股票的买卖&#xff0c;并不再出现在股票商场上。停牌的原因或许是公司内部事务调整、财政审计、重大事件或公司被收购等。当一家公司的股票停牌时&#xff0c;这对持有该公司股票的投资者或许会带来一些影响。因而&#xff0c;了解停牌后…

最新医疗界AI资讯,远程评估帕金森病症状的AI工具问世

原创 | 文 BFT机器人 1、AI模型快速评估&#xff0c;自动生成评估报告 罗切斯特大学研究人员开发的一种人工智能工具可以帮助帕金森病患者在几分钟内远程评估其症状的严重程度。《npj数字医学》杂志上的一项研究介绍了这种新工具&#xff0c;它能让用户在网络摄像头前通过敲击…

如何验证高压放大器的性能好坏呢

验证高压放大器的性能好坏&#xff0c;就需要考虑一系列关键指标和测试方法。这些指标包括频率响应、增益、失真、输出功率、噪声以及稳定性等&#xff0c;使我们能够全面评估放大器的性能和质量。下面西安安泰电子将介绍如何验证高压放大器的性能&#xff0c;并针对不同指标提…

眼镜镜片 光致变色镜片

声明 本文是学习GB-T 9105-2023 眼镜镜片 光致变色镜片. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 6 标志 6.1 通用要求 镜片的表面、包装或附带文件中&#xff0c;应标明下列参数&#xff1a; a) 产品名称、商标&#xff1b; b) 制造商或供…

Python面向对象编程:深入理解类、对象、继承和多态

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 面向对象编程&#xff0…

数据结构-----队列

目录 前言 队列 定义 队列的定义和操作方法 队列节点的定义 操作方式 顺序表实现队列&#xff08;C/C代码&#xff09; 链表实现队列&#xff08;C/C代码&#xff09; Python语言实现队列 前言 排队是我们日常生活中必不可少的一件事&#xff0c;去饭堂打饭的时候排队&a…

laravel框架 - 事件与监听器

一&#xff0c;绑定事件与监听器 在app\Providers下的EventServiceProvider.php中添加我们定义的事件与监听器 protected $listen [Registered::class > [SendEmailVerificationNotification::class,],App\ebvent\RegisterMessage>[//事件App\listeners\SendMessage//监…

【笔试强训选择题】Day43.习题(错题)解析

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;笔试强训选择题 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff…

为什么qt设置了utf-8 bom 格式后还是有乱码

有乱码 void SingleApplication::_showInstanceRunningDialog() {// 创建一个提示窗口QMessageBox msgBox;msgBox.setIcon(QMessageBox::Information);msgBox.setWindowTitle("应用已运行");msgBox.setText("应用程序已经在运行中。");msgBox.setStandardB…

计算机毕业设计 基于SSM+Vue的医院门诊互联电子病历管理信息系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

GE PRG-MODEM 调节器模块

GE PRG-MODEM 调节器模块通常是工业自动化和控制系统中的一种通信设备&#xff0c;用于远程监测、控制和数据传输。以下是可能包括在该模块中的一些产品特点&#xff1a; 通信接口&#xff1a;PRG-MODEM 模块通常配备各种通信接口&#xff0c;例如串行接口&#xff08;RS-232、…

docker报错Error response from daemon: Container xxx is not running

1. 问题 在移植了docker后&#xff0c;执行了sudo docker run --name myrosort -p 80:80 -d rosort 指令运行名为myrosort的容器&#xff0c;通过sudo docker ps -a也可以看到确实运行了 (base) neousysneousys-Nuvo-5000:~/wqw/docker/20230915$ sudo docker run --name myr…

springboot基础--实现默认登录页面

1、搭建项目 依赖中 多加入thymeleaf依赖 <dependencies><!--thymeleaf的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><!--we…

每日一题~二叉搜索树中的众数

题目链接&#xff1a;501. 二叉搜索树中的众数 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路分析&#xff1a; 由题可知&#xff0c;题目中所给的树是一颗二叉搜索树&#xff0c;二叉搜索树的中序遍历结果是一个从小到大的数据集&#xff0c;那么我们可…

全国职业技能大赛云计算--高职组赛题卷④(容器云)

全国职业技能大赛云计算--高职组赛题卷④&#xff08;容器云&#xff09; 第二场次题目&#xff1a;容器云平台部署与运维任务1 Docker CE及私有仓库安装任务&#xff08;5分&#xff09;任务2 基于容器的web应用系统部署任务&#xff08;15分&#xff09;任务3 基于容器的持续…

计数排序与基数排序

计数排序与基数排序 计数排序 计数排序&#xff1a;使用一个数组记录序列中每一个数字出现的次数&#xff0c;将该数组的下标作为实际数据&#xff0c;元素的值作为数据出现的次数。例如对于序列[3,0,1,1,3,3,0,2]&#xff0c;统计的结果为&#xff1a; 0出现的次数&#xf…

【Linux】基础IO,软硬链接,动静态库

1. 认识IO 什么是IO I/O简单来说对应的就是两个单词Input和Output&#xff0c;指的是计算机系统与外部环境&#xff08;通常是硬件设备或其他计算机系统&#xff09;之间的数据交换过程 I/O 可以分为两种主要类型&#xff1a; 输入&#xff08;Input&#xff09;&#xff1a; …

生命周期简化idea配置

生命周期简图 扩展接口介绍 2.1 Aware接口 在spring中Aware接口表示的是感知接口&#xff0c;表示spring框架在Bean实例化过程中以回调的方式将特定在资源注入到Bean中去&#xff08;如&#xff1a;ApplicationContext, BeanName,BeanFactory等等&#xff09;。Aware接口本事没…

Java——break、continue(学习笔记)

1.break(主要与switch搭配使用) 在任何循环语句的主体部分&#xff0c;均可用break控制循环的流程。break用于强行退出循环&#xff0c;不执行循环中剩余的语句。 2.continue 用在循环语句体中&#xff0c;用于终止某次循环过程&#xff0c;即跳过循环体中尚未执行的语句&am…