C#基础——XML文件的使用

本文详细介绍C#中XML文件的使用规则,包括XML的基本结构、语法要求及实体引用等,并通过具体示例演示如何利用C#进行XML文档的解析与操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#基础——XML文件的使用

语法规则

  1. XML 必须包含根元素,它是所有其他元素的父元素,如下中root既为根元素,若有声明需放在第一行。
<?xml version="1.0" encoding="utf-8"?>
<root>
  <child>
    <subchild>.....</subchild>
  </child>
</root>

(注:声明内容为:以上实例包含 XML 版本(UTF-8 也是 HTML5, CSS, JavaScript, PHP, 和 SQL 的默认编码。)
2. 必须有关闭标签
如下所示的,<></>为固定写法,必须配对出现

<root></root> 
  1. 嵌套需要安装一定顺序 如下 上面那行为正确镶嵌顺序,下方为错误镶嵌顺序
 `<root> <a>  This true</a> </root> `
 `<root> <a>  This false </root> </a>`
  1. 如下图所示,在 XML 中,XML 的属性值必须加引号
    第一个为错误的,第二个为正确写法
<note name=hahaha>
<to>Tove</to>
<from>Lisi</from>
</note>

<note name="hahaha">
<to>Tove</to>
<from>Lisi</from>
</note>
  1. 注释的使用,下图所示为注释的使用
<!-- This is a comment -->

6.实体引用

在 XML 中,一些字符拥有特殊的意义。
如果您把字符 “<” 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。
这样会产生 XML 错误:
if salary < 1000 then
为了避免这个错误,请用实体引用来代替 “<” 字符:
if salary < 1000 then
在 XML 中,有 5 个预定义的实体引用:
在这里插入图片描述
注释:在 XML 中,只有字符 “<” 和 “&” 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。

7.空格保留问题
在 XML 中,文档中的空格不会被删减。使用了多少个空格,实际输出多少个空格
8. XML存储换行问题
在 Windows 应用程序中,换行通常以一对字符来存储:回车符(CR)和换行符(LF)。
在 Unix 和 Mac OSX 中,使用 LF 来存储新行。
在旧的 Mac 系统中,使用 CR 来存储新行。
XML 以 LF 存储换行。

实例:

XML 必须包含根元素,它是所有其他元素的父元素,比如以下实例中skills 就是根元素:
注:图片中xml技能信息表为为下文中TextFile1内容,自行改名,两者命名一致即可。在这里插入图片描述
XML 配置文件内容 文件名为TextFile1

<skills>
  <skill>
    <id>2</id>
    <name lang="cn">技能1</name>
    <damage>130</damage>
  </skill>
  <skill>
    <id>3</id>
    <name lang="cn">技能2</name>
    <damage>90</damage>
  </skill>
  <skill>
    <id>4</id>
    <name lang="cn">技能4</name>
    <damage>400</damage>
  </skill>
  <skill>
    <id>5</id>
    <name lang="en">技能4</name>
    <damage>30</damage>
  </skill>
</skills>

自己的类 用来重写构造ToString

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

        public override string ToString()
        {
            return string.Format("ID:"+ID+"Name:"+Name+"Lang:"+Lang+"Damage:"+Damage);
        }
    }
}

功能实现 内部含有解释

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

    class Program {
        static void Main(string[] args) {
            //创建技能信息集合,用来存储所有的技能信息
            List<Skill> skillList = new List<Skill>();

            // XmlDocment专门用来解析xml文档的
            XmlDocument xmlDoc = new XmlDocument();
            //选择要加载解析的xml文档的名字
            //xmlDoc.Load("xml技能信息.txt");
            xmlDoc.LoadXml(  File.ReadAllText("xml技能信息.txt") );//传递一个字符串(xml格式的字符串)

            //得到根结点 (xmlnode用来代表一个结点)
            XmlNode rootNode = xmlDoc.FirstChild;//获取第一个结点 
            
            //得到根结点下面的子节点的集合
            XmlNodeList skillNodeList=  rootNode.ChildNodes;//获取当前结点下面的所有子节点

            foreach (XmlNode skillNode in skillNodeList)
            {
                Skill skill = new Skill();
                XmlNodeList fieldNodeList = skillNode.ChildNodes;//获取skill结点下面所有的结点 
                foreach (XmlNode fieldNode in fieldNodeList)
                {
                    if (fieldNode.Name == "id")//通过Name属性 可以获取一个结点的名字
                    {
                        int id = Int32.Parse(fieldNode.InnerText);//获取结点内部的文本
                        skill.Id = id;
                    }else if (fieldNode.Name == "name")
                    {
                        string name = fieldNode.InnerText;
                        skill.Name = name;
                        skill.Lang = fieldNode.Attributes[0].Value;
                    }
                    else
                    {
                        skill.Damage = Int32.Parse(fieldNode.InnerText);
                    }
                }
                skillList.Add(skill);
            }
            foreach (Skill skill in skillList)
            {
                Console.WriteLine(skill);
            }
            Console.ReadKey();
        }
    }

注:本文为作者记录XML使用方法,仅供学习使用.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ۓ明哲ڪ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值