zoukankan      html  css  js  c++  java
  • XML教程、语法手册、数据读取方式大全

    XML简单易懂教程


    本文提供全流程,中文翻译。

    Chinar坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)




    XML ——数据格式的写法


    节点的书写规范必须是 <Root>开头 </Root>结束,中间包含子节点

    <Root> —— 根节点; ID 是根节点 <Root>的一个属性

    <People > —— 一级节点

    <Name> —— 二级节点

    <Age> —— 二级节点

    名字取自《魁拔》动画电影 —— 推荐观看,国产有诗意的作品
    举个栗子黑白88

    <?xml version="1.0" encoding="utf-8"?>
    <!--这是一行注释,上边首行是一个固定格式-->
    <!--version:版本,encoding:编码格式-->
    <Root>
      <People ID="1">
        <Name>我的小鱼你醒了</Name>
        <Age>11</Age>
      </People>
      <People ID="2">
        <Name>还记得早晨吗</Name>
        <Age>22</Age>
      </People>
      <People ID="3">
        <Name>昨夜你曾经说</Name>
        <Age>33</Age>
      </People>
      <People ID="4">
        <Name>愿夜幕永不开启</Name>
        <Age>44</Age>
      </People>
    </Root>

    Read Data —— 读取数据

    1

    - - First Method —— 层层读取(- -复杂)


    Document —— 文档

    Element —— 元素

    Application.dataPath —— 数据文件夹所在路径

    Attribute —— 属性

    InnerText —— 元素文本

    (XmlElement) —— 强制转换

    举个栗子黑白88

    using UnityEngine;
    using System.Xml;//引用XML命名空间
    
    
    /// <summary>
    /// 测试读取XML脚本
    /// </summary>
    public class TestXML : MonoBehaviour
    {
        /// <summary>
        /// 初始化函数
        /// </summary>
        void Start()
        {
            FistMethod(); //调用第一种方法
        }
    
    
        /// <summary>
        /// 第一种读取方法
        /// </summary>
        void FistMethod()
        {
            XmlDocument doc = new XmlDocument();                    //实例化一个XmlDocument类对象 :创建一个XML文档
    
            doc.Load(Application.dataPath + "/Data/XML.xml");       //读取XML文档
    
            XmlElement rootEle = (XmlElement) doc.LastChild;        //获得根节点 :由于根节点就是最后一个节点,所以用Lastchild
    
            foreach (XmlElement childNodeEle in rootEle.ChildNodes) //遍历根节点中的子节点:rootEle.ChildNodes —— 返回的是所有子节点
            {
                print(childNodeEle.GetAttribute("ID"));                       //打印子节点的属性
    
                XmlElement nameEle = (XmlElement) childNodeEle.ChildNodes[0]; //打印子节点<People>中的:子节点的第一个节点 <Name>
    
                XmlElement ageEle  = (XmlElement) childNodeEle.ChildNodes[1]; //打印子节点<People>中的:子节点的第二个节点 <Age>
    
                print(nameEle.InnerText + " " + ageEle.InnerText);            //打印Name 和 Age
            }
    
            //rootEle.GetElementsByTagName("Name")  通过名字标签来获取元素
            XmlNodeList list = rootEle.GetElementsByTagName("Name"); //找到节点<Root>中,名叫<Name>的子节点. (系统会自动找<People>下的所有<Name>节点)
    
            foreach (XmlElement ele in list)                         //遍历集合中元素
            {
                print(ele.InnerText); //打印元素文本Name
            }
        }
    }

    这里写图片描述


    2

    - - Second Method —— XPath表达式读取(- -简单)

    1

    - - XPath —— 绝对路径


    Document —— 文档

    Element —— 元素

    Application.dataPath —— 数据文件夹所在路径

    InnerText —— 元素文本


    doc.SelectNodes("/Root/People/Name"); 函数中传入的参数为:绝对路径

    “/根节点 Root /第一节点 People /第二节点 Name

    函数会根据XPath表达式,找到XML文档中,一个绝对路径下的所有 Name 子节点,并返回一个 List 集合

    举个栗子黑白88

    using UnityEngine;
    using System.Xml;//引用XML命名空间
    
    
    /// <summary>
    /// 测试读取XML脚本
    /// </summary>
    public class TestXML : MonoBehaviour
    {
        /// <summary>
        /// 初始化函数
        /// </summary>
        void Start()
        {
            SecondMethod(); //调用第二种方法
        }
    
    
        /// <summary>
        /// 第二种读取方法
        /// </summary>
        void SecondMethod()
        {
            XmlDocument doc = new XmlDocument();                    //实例化一个XmlDocument类对象 :创建一个XML文档
            doc.Load(Application.dataPath + " " + "/Data/XML.xml"); //读取XML文档
    
                                                                    //XPath表达式来解析 :一个路径语法
                                                                    //doc.SelectSingleNode(""); 查找单个节点
                                                                    //doc.SelectNodes(""); 查找多个节点
                                                                    //doc.SelectNodes("")返回值 :一个 XmlnodeList 集合
            XmlNodeList list = doc.SelectNodes("/Root/People/Name");//“/根节点Root/第一节点People/第二节点Name”
            foreach (XmlElement ele in list)//遍历集合中的元素
            {
                print(ele.InnerText); //打印元素文本
            }
        }
    }

    这里写图片描述


    1

    - - First Element —— 取得第一个元素


    doc.SelectNodes("/Root/People[1]/Name");

    取得第二个节点 <People> 中的第一节点 <Name>

    举个栗子黑白88

    第一个元素


    2

    - - Last Element —— 取得最后一个元素


    doc.SelectNodes("/Root/People[last()]/Name");

    取得第二个节点 <People> 中的最后一个节点 <Name>

    举个栗子黑白88

    这里写图片描述


    3

    - - Penult Element —— 取得倒数第二个元素


    doc.SelectNodes("/Root/People[last()-1]/Name");

    取得第二个节点 <People> 中的倒数第二个节点 <Name>

    举个栗子黑白88

    这里写图片描述


    4

    - - the top several Element —— 取得前几个元素


    doc.SelectNodes("/Root/People[position()<4]/Name");

    position() 小于4,就是前三个

    取得第二个节点 <People> 中的前三个节点 <Name>

    举个栗子黑白88

    这里写图片描述


    5

    - - Select Attribute Element —— 根据属性值ID找节点


    doc.SelectNodes("/Root/People[@ID]/Name");

    取得第二个节点 <People> 中属性为 ID 的节点 <Name>

    举个栗子黑白88

    这里写图片描述


    6

    - - Reject Attribute Element —— 根据属性值ID剔除节点


    doc.SelectNodes("/Root/People[@ID=3]/Name");

    取得第二个节点 <People> 中属性为 ID = 3的节点 <Name>

    举个栗子黑白88

    这里写图片描述

    doc.SelectNodes("/Root/People[@ID<3]/Name");

    取得第二个节点 <People> 中属性为 ID < 3的节点 <Name>

    举个栗子黑白88

    这里写图片描述


    2

    - - XPath ——相对路径(- - 极其简单)


    Document —— 文档

    Element —— 元素

    Application.dataPath —— 数据文件夹所在路径

    InnerText —— 元素文本


    doc.SelectNodes("//Age"); 函数中传入的参数为:相对路径

    “//第二节点 Age

    函数会根据XPath表达式,找到XML文档中,一个绝对路径下的所有 Age 子节点,并返回一个 List 集合

    注意:数据量庞大的时候 —— 性能上没有绝对路径好

    举个栗子黑白88

    using UnityEngine;
    using System.Xml;//引用XML命名空间
    
    
    /// <summary>
    /// 测试读取XML脚本
    /// </summary>
    public class TestXML : MonoBehaviour
    {
        /// <summary>
        /// 初始化函数
        /// </summary>
        void Start()
        {
            thirdMethod(); //调用第三种XPath相对路径 读取方法
        }
    
    
        /// <summary>
        /// 第三种XPath相对路径 读取方法
        /// </summary>
        void thirdMethod()
        {
            XmlDocument doc = new XmlDocument();                    //实例化一个XmlDocument类对象 :创建一个XML文档
            doc.Load(Application.dataPath + " " + "/Data/XML.xml"); //读取XML文档
            //XPath表达式来解析 :一个路径语法
            //doc.SelectSingleNode(""); 查找单个节点
            //doc.SelectNodes(""); 查找多个节点
            //doc.SelectNodes("")返回值 :一个 XmlnodeList 集合
            XmlNodeList list = doc.SelectNodes("//Age");  //直接找“//第二节点Age” —— 性能上没有绝对路径好
            foreach (XmlElement ele in list)              //遍历集合中的元素
            {
                print(ele.InnerText); //打印元素文本
            }
        }
    }

    这里写图片描述


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 相关阅读:
    三大流程控制:1、if判断语句 2、while循环语句 3、for循环语句
    变量剩余的部分,然后是基本数据类型、输入输出和基本运算符
    1.操作系统、2.编程语言分类、3.变量、4.运行python文件的三个阶段
    数据库4 待修
    电脑组合键
    redis 基础应用
    数据库3 待改
    数据库2 待修
    mysql 数据库基础篇
    socketserver 和 事件Event
  • 原文地址:https://www.cnblogs.com/chinarbolg/p/9601472.html
Copyright © 2011-2022 走看看