ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#.Net XML

2021-09-22 19:04:52  阅读:97  来源: 互联网

标签:XML xml C# System Person new using Net


XML(可扩展标记语言)

  • XML:eXtensible Markup Language
  • 什么是标记语言?什么是标记?
    • 标记(markup):文档中任何不想被打印输出的部分(不是真正的文档的内容,联想读书时做的“读书笔记”,在旁边写的注解等。)注解是注解,实际内容是实际内容。
    • 标记的作用:传递了关于文档本身以外的额外信息。比如:标记文档的某部分该如何显示,某部分是什么意思等。重在数据,标记只是为了说明数据的含义而已。
  • 常见的标记语言:SGML、HTML、XML
  • HTML与XML的区别与联系?
  • Xml作用与应用场合:xml数据存储,html数据展示。
  • 语法、是否有预定义标签、各自的作用与意义
  • 相关术语:标签、节点、根节点、元素、子元素、后代元素、属性、嵌套、命名空间、字符数据(CDATA)

XML 基础(extensible markup language)

  • 仕么是XML,学它有什么用。优点:容易读懂:格式标准任何语言都内置了XML分析引繁,不用单独进行文件分析引擎的编写。
  • Xml就是用一种格式化的方式来存储数据,并且是文本文件任何时候我们都能很容易的用记事本打开。与Excel、Word不一样。
  • 举例:分析出一个xml格式的文件、分析出一个Excel文件。net程序中的一些配置文件app.config、web.config文件都是xm文件。
  • Ofice2007的文件格式docx、xlsx、pptx都是xml.先改成rar文件然后解压。
  • XML语法规范:标签(Tag)、嵌套(Nest)、属性。标签要闭合,属性值要用""包围,标签可以互相嵌套
  • XML树,父节点、子节点、兄弟节点(siblings)
  • XML和HTML的区别:
    1. 有且只能有一个根元素。
    2. XML中元素必须关闭;
    3. XML中元素的属性值必须用引号;
    4. XML大小写敏感(CaseSenstive)
  • 符合XML规范的HTML叫做“符合XHTML标准”。开发的网站必须通过W3C验证。
  • xml编写完成以后可以用浏览器来查着,如果写错了浏览器会提示。如果明明没措,浏览器还是提示错娱,则可能是文件编码问题。

Linq To XML:写

  • 读写XML有很多技术:
    1. Dom [XmlDocument、XDocument](文档对象模型,将整个xml加载到内存中,然后操作);
    2. Sax(事件驱动,.net中使用XmlReader(XmlTextReader)XmlWriter(XmlTextWriter)
      来替代)等,还有高级的读写技术;
    3. XmlSerializerxml序列化,需要先定义类);
    4. Linq To XML(SystemXml.Linq),用到的就是XdocumentXelement等等,XmlSerializer要求对每种不同的文件都定义一套类,很麻烦,而Linq To XML则不需要单独创建类,当然更底层一些,代码比XmlSerializer多,灵活性更高。SystemXml下的类是2.0及之前操作xml推荐的,现在很多入也仍然在用这个namespace下的类,这个namespace下的类和Linq To XML非常相似,因此不用单独学核心类XElement,一个XElement表示一个元素,new XEiement("order"),创建一个名学为Order的标签,调用Add增加子元素,也是XElement对象,和TreeView一样。
  • 想得到字符串怎么办?ToString
  • 调用XElementSave方法将xml内容保存在Writer
  • 创建xml的时候可以用XDocument也可以不用。(直接用XElement

实例

▲ 界面
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace XML_Bzhan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            #region 通过编程的方式实现XML写入
            // 1. 在内存中构建一个 Dom 对象
            XmlDocument xmlDoc = new XmlDocument();
            // 增加一个文档说明
            XmlDeclaration xmlDeclaration =  xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            xmlDoc.AppendChild(xmlDeclaration);
            // 为文档增加一个根元素
            // 2.1 创建一个根元素
            XmlElement rootElement = xmlDoc.CreateElement("school");
            xmlDoc.AppendChild(rootElement);

            // 为根元素增加子元素,接下来增加元素都要将子元素增加到rootElement元素下
            XmlElement xmlClassElement = xmlDoc.CreateElement("class");
            // 为class增加一个id属性
            XmlAttribute attr = xmlDoc.CreateAttribute("id");
            attr.Value = "c01";
            xmlClassElement.Attributes.Append(attr);
            rootElement.AppendChild(xmlClassElement);

            //4.为class元素下创建一个student节点
            XmlElement xmlStudentElement = xmlDoc.CreateElement("student");
            XmlAttribute attrSid = xmlDoc.CreateAttribute("sid");
            attrSid.Value = "s011";
            xmlStudentElement.Attributes.Append(attrSid);
            xmlClassElement.AppendChild(xmlStudentElement);

            XmlElement xmlNameElement = xmlDoc.CreateElement("name");
            xmlNameElement.InnerText = "黄林";
            //5.向student节点下增加一个name节点和一个age节点
            xmlStudentElement.AppendChild(xmlNameElement);

            XmlElement xmlAgeElement = xmlDoc.CreateElement("Age");
            xmlAgeElement.InnerText = "18";
            xmlStudentElement.AppendChild(xmlAgeElement);

            // 2. 将 Dom 对象写入到 xml 文件中
            xmlDoc.Save("school.xml");
            MessageBox.Show("OK");
            #endregion
        }
    }
}

写入的 school.xml 文件如下:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<school>
  <class id="c01">
    <student sid="s011">
      <name>黄林</name>
      <Age>18</Age>
    </student>
  </class>
</school>

用 List 集合之循环添加

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace XML_Bzhan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            #region  List 集合循环写入 xml
            List<Person> list = new List<Person>() {
                new Person() {Name = "黄玲", Age = 19, Email = "hl@yahoo.com"},
                new Person() {Name = "徐正龙", Age = 29, Email = "xzl@yahoo.com"},
                new Person() {Name = "何宏伟", Age = 39, Email = "hhw@yahoo.com"},
                new Person() {Name = "杨锁", Age = 19, Email = "yangsuo@yahoo.com"},

            };

            // 1. 创建一个 Dom 对象
            XmlDocument xDoc = new XmlDocument();
            // 2. 编写文档定义
            XmlDeclaration xmlDoc = xDoc.CreateXmlDeclaration("1.0", "utf-8", "yes");
            xDoc.AppendChild(xmlDoc);

            // 3. 编写一个根节点
            XmlElement xmlRoot = xDoc.CreateElement("List");
            xDoc.AppendChild(xmlRoot);

            // 4. 循环创建 Person 节点
            for (int i = 0; i < list.Count; i++) {
                // 4.1 创建一个 Person 元素
                XmlElement xmlPerson = xDoc.CreateElement("Person");
                XmlAttribute xmlAttrId = xDoc.CreateAttribute("id");
                xmlAttrId.Value = (i + 1).ToString();
                // 将属性添加到 Person 节点中
                xmlPerson.Attributes.Append(xmlAttrId);
                // 创建 Name
                XmlElement xmlName = xDoc.CreateElement("Name");
                xmlName.InnerText = list[i].Name;
                xmlPerson.AppendChild(xmlName);
                // 创建 Age
                XmlElement xmlAge = xDoc.CreateElement("Age");
                xmlAge.InnerText = list[i].Age.ToString();
                xmlPerson.AppendChild(xmlAge);
                // 创建 Email
                XmlElement xmlEmail = xDoc.CreateElement("Email");
                xmlEmail.InnerText = list[i].Email;
                xmlPerson.AppendChild(xmlEmail);
                // 最后把 Person 加到跟节点之下
                xmlRoot.AppendChild(xmlPerson);

                // 将 Dom 对象写入到 xml 文件中
                xDoc.Save("list.xml");
            }
                MessageBox.Show("OK");
            #endregion
        }
    }

    public class Person
    {
        public string Name {
            get;
            set;
        }
        public int Age {
            get;
            set;
        }
        public string Email {
            get;
            set;
        }

    }
}

写入的 List.xml文件内容:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<List>
  <Person id="1">
    <Name>黄玲</Name>
    <Age>19</Age>
    <Email>hl@yahoo.com</Email>
  </Person>
  <Person id="2">
    <Name>徐正龙</Name>
    <Age>29</Age>
    <Email>xzl@yahoo.com</Email>
  </Person>
  <Person id="3">
    <Name>何宏伟</Name>
    <Age>39</Age>
    <Email>hhw@yahoo.com</Email>
  </Person>
  <Person id="4">
    <Name>杨锁</Name>
    <Age>19</Age>
    <Email>yangsuo@yahoo.com</Email>
  </Person>
</List>

以上的方式是以编程的方式来实现的,写起来比较麻烦。

通过xmlDocument方式写入xml文件(推荐)

需添加 using System.Xml.Linq; 命名空间。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Linq;

namespace XML_Bzhan
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            #region  通过 XDocument 方式写入 xml 文件
            List<Person> list = new List<Person>() {
                new Person() {Name = "黄玲", Age = 19, Email = "hl@yahoo.com"},
                new Person() {Name = "徐正龙", Age = 29, Email = "xzl@yahoo.com"},
                new Person() {Name = "何宏伟", Age = 39, Email = "hhw@yahoo.com"},
                new Person() {Name = "杨锁", Age = 19, Email = "yangsuo@yahoo.com"},

            };

            // 1.创建一个 Dom 对象
            XDocument xDoc = new XDocument();// 在 using System.Xml.Linq; 命名空间下。
            XDeclaration xDec = new XDeclaration("1.0", "utf-8", "no");
            //xDoc.Add(xDec);  // 这样写不对,会出错误。
            xDoc.Declaration = xDec; // 设置 xml 文档的定义

            // 2.创建根节点
            XElement rootElement = new XElement("List");
            xDoc.Add(rootElement);

            // 3. 循环 List 集合创建 Person 节点
            for (int i = 0; i < list.Count; i++) {
                // 为每个 Person 对想创建一个 Person 元素
                XElement xElementPerson = new XElement("Person");
                xElementPerson.SetAttributeValue("id", (i + 1).ToString());

                xElementPerson.SetElementValue("Name", list[i].Name);
                xElementPerson.SetElementValue("Age", list[i].Age);
                xElementPerson.SetElementValue("Email", list[i].Email);

                rootElement.Add(xElementPerson);
            }
            // 4. 保存到文件
            xDoc.Save("listNew.xml");
            MessageBox.Show("OK");

            #endregion
        }

    }

    public class Person
    {
        public string Name {
            get;
            set;
        }
        public int Age {
            get;
            set;
        }
        public string Email {
            get;
            set;
        }

    }
}

输出的listNew.xml文件内容:

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<List>
  <Person id="1">
    <Name>黄玲</Name>
    <Age>19</Age>
    <Email>hl@yahoo.com</Email>
  </Person>
  <Person id="2">
    <Name>徐正龙</Name>
    <Age>29</Age>
    <Email>xzl@yahoo.com</Email>
  </Person>
  <Person id="3">
    <Name>何宏伟</Name>
    <Age>39</Age>
    <Email>hhw@yahoo.com</Email>
  </Person>
  <Person id="4">
    <Name>杨锁</Name>
    <Age>19</Age>
    <Email>yangsuo@yahoo.com</Email>
  </Person>
</List>

可见,是一样的。

xml 写入总结

写入Xm1的两种方式:

  1. XmlDocument类,标准的Dom方式。
kmlDocument document = new XmlDocument();
document.CreateElement();
xxxxxxxx.CreateAttribute();
  1. XDocument类
XElement x = new xxx();
...Add ();

读取Xml

  1. 遍历所有节点元素,分别读取
  2. 根据节点名称,或者是id等等一些元素,快速获取某个节点。



参考:
1.link-01 // 通过XmlDocument与XDocument方式写入Xml

标签:XML,xml,C#,System,Person,new,using,Net
来源: https://www.cnblogs.com/huvjie/p/15321208.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有