zoukankan      html  css  js  c++  java
  • 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();
            }
        }
    }
    

    输出结果:

  • 相关阅读:
    set的使用
    this.$watch(),this.$set(),this.$nextTick()=>{})
    web 错误代码解析
    samba 问题解决
    Linux postfix配置方法
    Linux rhcsa认证考试试题模拟
    Linux 使用nmcli配置网络
    Linux 链路聚合
    Linux ISCSI服务配置
    Linux Apache配置https访问
  • 原文地址:https://www.cnblogs.com/lmx282110xxx/p/10798675.html
Copyright © 2011-2022 走看看