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

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。首先有两点是需要肯定的:   第一:XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解,等待只会让你失去机会;   第二:新知识肯定会有很多新概念,尝试理解和接受,您才可能提高。不要害怕和逃避,毕竟我们还年轻。   本文共分五大部分。分别是XML快速入门,XML的概念,XML的术语,XML的实现,XML的实例分析。最后附录介绍了XML的相关资源。作者站在普通网页设计人员的角度,用平实生动的语言,向您讲述XML的方方面面,帮助你拨开XML的神秘面纱,快速步入XML的新领域。 • 第一章:XML快速入门 • 一. 什么是XML? • 二. XML是新概念吗? • 三. 使用XML有什么好处? • 四. XML很难学吗? • 五. XML和HTML的区别 • 六. XML的严格格式 • 七. 关于XML的更多 • 第二章:XML概念 • 一. 扩展性 • 二. 标识 • 三. 语言 • 四. 结构化 • 五. Meta数据 • 六. 显示 • 七. DOM • 第三章:XML的术语 • 导言 • 一.XML文档的有关术语 • 二.DTD的有关术语 • 第四章:XML语法 • 一.XML语法规则 • 二.元素的语法 • 三.注释的语法 • 四.CDATA的语法 • 五.Namespaces的语法 • 六.entity的语法 • 七.DTD的语法 • 第五章:XML实例解释 • 一.定义新标识 • 二.建立XML文档 • 三.建立相应的HTML文件 • 第六章:XML相关资源 五. XML和HTML的区别 XML和HTML都来自于SGML,它们都含有标记,有着相似的语法,HTML和XML的最大区别在于:HTML是一个定型的标记语言,它用固有的标记来描述,显示网页内容。比如表示首行标题,有固定的尺寸。相对的,XML则没有固定的标记,XML不能描述网页具体的外观,内容,它只是描述内容的数据形式和结构。 这是一个质的区别:网页将数据和显示混在一起,而XML则将数据和显示分开来。 我们看上面的例子,在myfile.htm中,我们只关心页面的显示方式,我们可以设计不同的界面,用不同的方式来排版页面,但数据是储存在myfile.xml中,不需要任何改变。 (如果你是程序员,你会惊讶的发现,这与模块化面向对象编程的思想极其相似!其实网页何尝不是一种程序呢?) 正是这种区别使得XML在网络应用和信息共享上方便,高效,可扩展。所以我们相信,XML做为一种先进的数据处理方法,将使网络跨越到一个新的境界。 六. XML的严格格式 吸取HTML松散格式带来的经验教训,XML一开始就坚持实行"良好的格式"。 我们先看HTML的一些语句,这些语句在HTML中随处可见: 1. sample 2.sample 3.sample 4.samplar 在XML文档中,上述几种语句的语法都是错误的。因为: 1.所有的标记都必须要有一个相应的结束标记; 2.所有的XML标记都必须合理嵌套; 3.所有XML标记都区分大小写; 4.所有标记的属性必须用""括起来; 所以上列语句在XML中正确的写法是 1. sample 2.sample 3.sample 4.samplar   另外,XML标记必须遵循下面的命名规则: 1.名字中可以包含字母、数字以及其它字母; 2.名字不能以数字或"_" (下划线) 开头; 3.名字不能以字母 xml (或 XMLXml ..) 开头; 4.名字中不能包含空格。 在XML文档中任何的差错,都会得到同一个结果:网页不能被显示。各浏览器开发商已经达成协议,对XML实行严格而挑剔的解析,任何细小的错误都会被报告。你可以将上面的myfile.xml修改一下,比如将改为,然后用IE5直接打开myfile.xml,会得到一个出错信息页面: XML轻松学习手册 ajie <E

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值