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

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

  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/chinarbolg/p/9601472.html
Copyright © 2011-2022 走看看