XML的写法及数据读取方式的使用

简介: XML的写法及数据读取方式的使用本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)...

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

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

相关文章
|
7月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
82 2
|
7月前
|
XML 存储 JSON
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
102 0
|
XML 存储 JSON
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
112 0
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
51 1
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
182 7
使用Java和XPath在XML文档中精准定位数据
|
7月前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
149 1
|
2月前
|
XML Web App开发 数据格式
HTML 页面显示 XML 数据
10月更文挑战第2天
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
574 0
|
4月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
131 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
7月前
|
XML 机器学习/深度学习 JSON
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。
84 0
在火狐浏览器调ajax获取json数据时,控制台提示“XML 解析错误:格式不佳”。