C#编程 XML文档
XML 指可扩展标记语言,XML 被设计用来传输和存储数据。XML 被设计用来结构化、存储以及传输信息。
xml文档展示
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>这个 XML 文档仍然没有做任何事情。它仅仅是包装在 XML 标签中的纯粹的信息。我们需要编写软件或者程序,才能传送、接收和显示出这个文档。
第一行是 XML 声明。它定义 XML 的版本 (1.0) 和所使用的编码 (ISO-8859-1 = Latin-1/西欧字符集)。
下一行描述文档的根元素(像在说:“本文档是一个便签”):<note>
接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
最后一行定义根元素的结尾: </note>
XML 文档形成一种树结构
XML 文档必须包含根元素。该元素是所有其他元素的父元素。
XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。 所有元素均可拥有子元素:
<root>
  <child>
    <subchild>.....</subchild>
  </child>
  <child>
    <subchild>.....</subchild>
  </child>
</root>
XML 元素
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。
<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
<book category="WEB">
  <title>Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>
</bookstore><bookstore> 和 <book> 都拥有元素内容,因为它们包含了其他元素。<author> 只有文本内容,因为它仅包含文本。
只有 <book> 元素拥有属性 (category="CHILDREN")。
xml语法规则
所有 XML 元素都须有关闭标签
XML 标签对大小写敏感
XML 必须正确地嵌套
XML 文档必须有根元素
XML 的属性值须加引号
C#操作XML
在C#中使用控制台程序,用 XMLDocument进行xml操作,包括查询,增加,修改,删除和保存。
下面使用C#来解析一个xml文档:
<skills>
  <skill>
    <id>2</id>
    <name lang="cn">天下无双</name>
    <damage>123</damage>
   </skill>
  <skill>
    <id>3</id>
    <name lang="cn">永恒零度</name>
    <damage>90</damage>
  </skill>
  <skill>
    <id>4</id>
    <name lang="en">咫尺天涯</name>
    <damage>400</damage>
  </skill>
</skills>定义一个Skill类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _030_项目 {
    // 技能类
    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: {0}, Name: {1}, Lang: {2}, Damage: {3}", Id, Name, Lang, 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;
namespace _030_项目了 {
    class Program {
        static void Main(string[] args) {
            //创建技能信息集合,用来存储所有的技能信息
            List<Skill> skillList = new List<Skill>();
            // XmlDocment专门用来解析xml文档的
            XmlDocument xmlDoc = new XmlDocument();
            //选择要加载解析的xml文档的名字
            //xmlDoc.Load("skillinfo.txt");
            xmlDoc.LoadXml(  File.ReadAllText("skillinfo.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();
        }
    }
}
输出结果:

C#编程 XML文档的更多相关文章
- iOS网络编程笔记——XML文档解析
		今天利用多余时间研究了一下XML文档解析,虽然现在移动端使用的数据格式基本为JSON格式,但是XML格式毕竟多年来一直在各种计算机语言之间使用,是一种老牌的经典的灵活的数据交换格式.所以我认为还是很有 ... 
- 四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
		众所周知,现在解析XML的方法越来越多,但主流的方法也就四种,即:DOM.SAX.JDOM和DOM4J 下面首先给出这四种方法的jar包下载地址 DOM:在现在的Java JDK里都自带了,在xml- ... 
- 【JAVA与DOM4J实现对XML文档的CRUD操作】
		一.简介 1.网上下载DOM4J 1.6.1压缩包,解压开之后,发现几个目录和一个jar文件,jar文件是必须的文件其它目录: docs目录:帮助文档的目录,单击index.html: Quick s ... 
- XML 文档和数据
		.NET Framework 4.5 其他版本 .NET Framework 提供了一组全面而集成的类,可用来方便地生成可以识别 XML 的应用程序. 通过以下命名空间中的类,可以分析和编写 XML, ... 
- Java解析XML文档(简单实例)——dom解析xml
		一.前言 用Java解析XML文档,最常用的有两种方法:使用基于事件的XML简单API(Simple API for XML)称为SAX和基于树和节点的文档对象模型(Document Object ... 
- SAX解析和生成XML文档
		原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者: 永恒の_☆ 地址: http://blog.csdn.net/chenghui031 ... 
- XML文档形式&JAVA抽象类和接口的区别&拦截器过滤器区别
		XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? a: 两种形式 dtd schemab: 本质区别:schema本身是xml的,可以被XML解析器解析(这也是从DTD上发 ... 
- 使用DOM4J解析XML文档,以及使用XPath提取XML文档
		使用DOM4J解析XML文档 需要首先下载DOM4J工具包.这是个第三方工具包 在使用DOM4J解析的时候需要导入 DOM4J的JAR包 下载DOM4J工具包->在MyEclipse中新建lib ... 
- Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)
		本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 一.前言 我们在<中我们描述了Python数据持久化的大体概念和基本处理方式,通过这些知识点我们已经 ... 
随机推荐
- .NET Core 3时代DevExpress Winforms v19.2增强Scheduler控件
			DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpr ... 
- Web应用界面好帮手!DevExtreme React和Vue组件全新功能上线
			行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,本文将主要介绍DevExtremev19.1中React组件响应式应用程序布局模板及CLI工具.本地React图表,和Vue组 ... 
- 学习如何写一个vue插件【入门篇】
			#### 疑答 1.市面上已经有那么多插件可用,为什么还要造轮子?学习.借鉴思想.应用到开发 2.能否在项目中使用?与网上插件使用相同 更新维护问题怎么解决? 自身动力,使用者反馈等 #### 准 ... 
- Object-C(自学1)
			----- 需求索要 自学了下 OBJECt-C ----- 就基础部分一些 和操作 command + R 运行command +B 只编译.m文件 NSlog() = printfNSLog 是 ... 
- 小程序上传base64的图片,可上传多张
			微信小程序上传图片转化为base64格式 clickimage: function(e) { var index = e.currentTarget.dataset.index; var count ... 
- 浮动float和清除clear
			一.浮动(float) float简介 取值:left,right,none,inherit,默认none(不浮动) 可应用与所有元素 没有继承性 不在正常流中,但会影响布局.因为一个元素浮动时,其他 ... 
- 【Winfrom-Button】 重写Button,去掉获取焦点时的边框
			Winfrom Button 去掉获取焦点时的边框: 自定义一个Button,重写ShowFocusCues方法 /// <summary> /// 去掉获取焦点的边框 /// </ ... 
- 浏览器表单自动填充默认样式 - autofill问题解决
			这不知道是个什么神仙网站,解决办法写的这么清楚,页面有这么让人舒服 https://lhajh.github.io/css/chrome/2018/04/17/The-chrome-browser-f ... 
- 实用——pojo (实体类) 常用函数
			1,转义方法 @JsonProperty("n") 
- Gulp error in WebStorm: Failed to list gulp tasks
			I have the same problem with webstorm after install a updated version of node. The solution for me i ... 
