XML教程、语法手册、数据读取方式大全
XML简单易懂教程
本文提供全流程,中文翻译。 Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
一
XML ——数据格式的写法
节点的书写规范必须是 <Root>
开头 </Root>
结束,中间包含子节点
<Root>
—— 根节点; ID
是根节点 <Root>
的一个属性
<People >
—— 一级节点
<Name>
—— 二级节点
<Age>
—— 二级节点
名字取自《魁拔》动画电影 —— 推荐观看,国产有诗意的作品
<?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)
—— 强制转换
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 集合
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>
2
- - Last Element —— 取得最后一个元素
doc.SelectNodes("/Root/People[last()]/Name");
取得第二个节点 <People>
中的最后一个节点 <Name>
3
- - Penult Element —— 取得倒数第二个元素
doc.SelectNodes("/Root/People[last()-1]/Name");
取得第二个节点 <People>
中的倒数第二个节点 <Name>
4
- - the top several Element —— 取得前几个元素
doc.SelectNodes("/Root/People[position()<4]/Name");
position() 小于4,就是前三个
取得第二个节点 <People>
中的前三个节点 <Name>
5
- - Select Attribute Element —— 根据属性值ID找节点
doc.SelectNodes("/Root/People[@ID]/Name");
取得第二个节点 <People>
中属性为 ID 的节点 <Name>
6
- - Reject Attribute Element —— 根据属性值ID剔除节点
doc.SelectNodes("/Root/People[@ID=3]/Name");
取得第二个节点 <People>
中属性为 ID = 3的节点 <Name>
doc.SelectNodes("/Root/People[@ID<3]/Name");
取得第二个节点 <People>
中属性为 ID < 3的节点 <Name>
2
- - XPath ——相对路径(- - 极其简单)
Document —— 文档
Element —— 元素
Application.dataPath —— 数据文件夹所在路径
InnerText —— 元素文本
doc.SelectNodes("//Age");
函数中传入的参数为:相对路径
“//第二节点 Age ”
函数会根据XPath表达式,找到XML文档中,一个绝对路径下的所有 Age 子节点,并返回一个 List 集合
注意:数据量庞大的时候 —— 性能上没有绝对路径好
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
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
XML教程、语法手册、数据读取方式大全的更多相关文章
- XML数据读取方式性能比较(一)
原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...
- geotrellis使用(二)geotrellis-chatta-demo以及geotrellis框架数据读取方式初探
在上篇博客(geotrellis使用初探)中简单介绍了geotrellis-chatta-demo的大致工作流程,但是有一个重要的问题就是此demo如何调取数据进行瓦片切割分析处理等并未说明,经过几天 ...
- Java中XML格式的字符串4读取方式的简单比较
Java中XML格式的字符串4读取方式的简单比较 1.java自带的DOM解析. import java.io.StringReader; import javax.xml.parsers.Docum ...
- XML(php中获取xml文件的方式/ajax获取xml格式的响应数据的方式)
1.XML 格式规范: ① 必须有一个根元素 ② 不可有空格.不可以数字或.开头.大小写敏感 ③ 不可交叉嵌套 ④ 属性双引号(浏览器自动修正成双引号了) ⑤ 特殊符号要使用实体 ⑥ 注释和HTML一 ...
- TensorFlow数据读取方式:Dataset API
英文详细版参考:https://www.cnblogs.com/jins-note/p/10243716.html Dataset API是TensorFlow 1.3版本中引入的一个新的模块,主要服 ...
- OleDbDataReader快速数据读取方式
查询得到OleDbDataReader后,有三种方式支持数据读取,如下: //方法一**速度中等 OleDbDataReader reader = command.ExecuteReader(); w ...
- Druid 0.17入门(4)—— 数据查询方式大全
本文介绍Druid查询数据的方式,首先我们保证数据已经成功载入. Druid查询基于HTTP,Druid提供了查询视图,并对结果进行了格式化. Druid提供了三种查询方式,SQL,原生JSON,CU ...
- TensorFlow全新的数据读取方式:Dataset API入门教程
TensorFlow.data : http://tech.ifeng.com/a/20171109/44752505_0.shtml Pytorch:https://ptorch.com/docs/ ...
- MYSQL 的数据读取方式
例子: create table T(X bit(8)); insert into T (X) values(b'11111111'); select X from T; 这个时候会发现这个X 是乱码 ...
随机推荐
- [ios]iOS8 定位
参考:http://www.2cto.com/kf/201410/342392.html http://blog.csdn.net/yongyinmg/article/details/39521523 ...
- js 对call apply bind理解
请参考 http://www.cnblogs.com/xljzlw/p/3775162.html 1.call和apply的区别:参数类型不同var mtt = { name: "mtt&q ...
- 你的centos/linux下有多个php.ini,不确定是哪个时
你的centos/linux下有多个php.ini,不确定是哪个时,但是你自己知道,你的php安装目录. 比如我的php安装目录是 /usr/local/php 那么可以通过命令来查找php.ini的 ...
- spring boot: @Entity @Repository一个简单的数据读存储读取
spring boot: @Entity @Repository一个简单的数据读存储读取 创建了一个实体类. 如何持久化呢?1.使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中 ...
- External RNA Controls Consortium (ERCC)
ERCC是啥? 外部RNA控制联盟,就是一套RNA-seq,基因表达检测过程中的控制系统,使得结果具有可重复性. RNA Spike-in Controls for Gene Expression W ...
- 转:Too many systemd: Created slice !
OS: centos-release-7-4.1708 /va/log/message 大量这种提示信息: resolvent: Here is how I got rid of these: vi ...
- 20161227xlVBA多文件合并计算
Sub NextSeven_CodeFrame() '应用程序设置 Application.ScreenUpdating = False Application.DisplayAlerts = Fal ...
- Confluence 6 LDAP 连接池配置参数
初始连接池大小(Initial Pool Size) 当初始化 LDAP 连接池的时候初始化创建的 LDAP 连接数量. 1 期望的连接池大小(Preferred Pool Size) 优化连接池的大 ...
- Access-Control-Allow-Origin实现跨域访问 跨域
总结:跨域的get,post请求 后台可以设置 Access-Control-*相关的参数,让浏览器支持. // 指定允许其他域名访问 header('Access-Control-Allow-Ori ...
- MySQL|RESTRICT|NO ACTION|CASCADE| SET NULL四种外键约束
外键约束比较多得两种情况: 1.父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败: ON UPDATE CASCADE ON DELETE RESTRICT 1 2.父表更新时子表也更新, ...