Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)

这篇具有很好参考价值的文章主要介绍了Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

XML,全称为可扩展标记语言(eXtensible Markup Language),是一种用于描述、传输和存储数据的语言。它被设计用来传输和存储数据,与 HTML 不同,XML 的主要目的不在于显示数据,而是强调数据的结构性。XML 使用类似 HTML 的标签表示数据的结构和其他信息。

2. 优缺点

  • XML的优点:

    • 易于人类阅读和编写:XML文档的格式清晰、易于理解,方便人们进行编辑和查看。
    • 跨平台性:XML使用Unicode编码,具有跨平台性,可以在不同的操作系统、编程语言和地区之间进行数据交换。
    • 可扩展性:XML可以自定义标签,适用于不同领域的扩展和定制,具有较强的灵活性。
    • 强大的查询和操作能力:XML文档的结构化特性使其可以方便地被计算机程序解析和查询,支持XPath等查询语言,方便进行数据操作。
  • XML的缺点:

    • 冗余数据:XML文档在描述数据时会产生大量的冗余数据,尤其是在数据量较大的情况下,会导致文件体积较大。
    • 性能问题:XML文档的解析和查询操作需要一定的时间和计算资源,在处理大量数据时可能会影响性能。
    • 安全性问题:XML文档可能包含恶意代码,如XSS攻击等,需要注意安全性问题。
    • 不适用于所有数据类型:XML不适用于存储所有类型的数据,例如二进制文件、大文本文件等不适合用XML存储。

3. 解析

  • 格式模板
<?xml version="1.0" encoding="UTF-8"?>  
<root>  
  <element1>内容1</element1>  
  <element2 attribute1="value1">内容2</element2>  
  <element3 attribute2="value2">  
    <subelement>子内容</subelement>  
  </element3>  
</root>

3.1 XmlDocument

3.1.1 优缺点

  • 优点:
    • 易于使用:XmlDocument提供了大量的方法和属性,可以方便地操作和查询XML文档。它提供了对整个XML文档的树形结构进行遍历和查询的能力,使用户可以轻松地获取XML文档中的节点、属性、文本等内容。
    • 内存占用较小:XmlDocument将整个XML文档加载到内存中,因此适用于处理较小的XML文件。由于整个XML文档被加载到内存中,用户可以快速地访问和查询XML文档中的任意节点,而不需要进行磁盘I/O操作。
  • 缺点:
    • 处理大型文件时可能会遇到性能问题:由于XmlDocument将整个XML文档加载到内存中,因此在处理大型XML文件时可能会遇到性能问题。大量的XML数据可能会导致内存溢出或性能下降。
    • 不适用于流式处理:XmlDocument适用于一次性解析整个XML文档,而不适用于流式处理。如果需要按需读取XML文档中的节点,XmlDocument可能不是最佳选择。

3.1.2 解析

  • 读取:
//1.读取XML文件
//XmlDocument xml = new XmlDocument();
//读取文本方式1-xml.LoadXml(传入xml文本字符串)
//读取文本方式2-xml.Load(传入路径)

//2.读取元素和属性
//获取单个节点 : XmlNode node = xml.SelectSingleNode(节点名)
//获取多个节点 : XmlNodeList nodeList = xml.SelectNodes(节点名)

//获取节点元素内容:node.InnerText
//获取节点元素属性:
//1.item.Attributes["属性名"].Value
//2.item.Attributes.GetNamedItem("属性名").Value

//通过迭代器遍历或者循环遍历XmlNodeList对象 可以获取到各单个元素节点


XmlDocument doc = new XmlDocument();  
doc.Load("example.xml");  
  
XmlNode root = doc.DocumentElement;  
XmlNode node = root.SelectSingleNode("//player");  
string name = node.Attributes["name"].Value;  
int age = int.Parse(node.Attributes["age"].Value);  
  
Debug.Log("Name: " + name);  
Debug.Log("Age: " + age);
  • 写入:
 //关键类 XmlDocument 用于创建节点 存储文件
 //关键类 XmlDeclaration 用于添加版本信息
 //关键类 XmlElement 节点类
XmlDocument doc = new XmlDocument();  
XmlElement root = doc.CreateElement("game");  
XmlElement player = doc.CreateElement("player");  
player.SetAttribute("name", "John");  
player.SetAttribute("age", 25);  
root.AppendChild(player);  
doc.AppendChild(root);  
doc.Save("example.xml");

3.2 XmlTextReader和XmlTextWriter

XMLTextReader 这个类设计的目的就是从XML文件中快速的读取数据,而对系统资源(主要包括内存和处理器时间)不做很高的要求。文章来源地址https://www.toymoban.com/news/detail-752084.html

3.2.1 优缺点

  • 优点:
    • 适用于流式处理:XmlTextReader适用于按需读取XML文档中的节点,适用于流式处理大型XML文件。通过逐个读取XML文档中的节点,XmlTextReader可以避免一次性加载整个XML文件到内存中,从而减少内存占用和提高处理性能。
    • 性能较好:由于XmlTextReader采用了事件驱动的模型,因此可以更好地利用系统资源,提高处理性能。事件驱动模型使得XmlTextReader可以更加高效地处理大型XML文件,同时减少CPU和内存的使用。
  • 缺点:
    • 事件驱动模型需要更多代码:相比XmlDocument类,XmlTextReader需要更多的代码来实现对XML文档的解析和处理。使用XmlTextReader进行XML解析需要编写更多的代码来处理事件触发和节点读取。
    • 不易于处理属性值:XmlTextReader对于属性值的处理不如XmlDocument方便,需要更多的代码来实现。使用XmlTextReader读取属性值时,需要额外编写代码来获取节点的属性并处理它们。
    • 它是只读的,仅向前的,不能在文档中执行向后导航操作

3.2.2 解析

  • XmlTextReader读取:
 static void XmlTextReaderTest()
        {
            XmlTextReader textReader = new XmlTextReader(filePath3);
            textReader.WhitespaceHandling = WhitespaceHandling.None;
            while (textReader.Read())
            {
                if (textReader.NodeType == XmlNodeType.Element)
                {
                  if (reader.Name == "player")  
                    {  
                       string name = reader.GetAttribute("name");  
                       int age = int.Parse(reader.GetAttribute("age"));  
                       Debug.Log("Name: " + name);  
                       Debug.Log("Age: " + age);  
                    }  
                }
                if (textReader.NodeType == XmlNodeType.Text)
                {
                
                }
                if (textReader.NodeType == XmlNodeType.EndElement)
                {
                
                }
            }
            //读取完毕后要记得关闭流,否则会占用文档,无法被其它线程打开
            textReader.Close();
        }
  • XmlTextWriter写入:
XmlTextWriter writer = new XmlTextWriter("example.xml", System.Text.Encoding.UTF8);  
writer.WriteStartElement("game");  
writer.WriteStartElement("player");  
writer.WriteAttributeString("name", "John");  
writer.WriteAttributeString("age", 25);  
writer.WriteEndElement(); // player  
writer.WriteEndElement(); // game   
writer.Close();

到了这里,关于Unity 数据读取|(五)XML文件解析(XmlDocument,XmlTextReader)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity数据解析(Json、XML、CSV、二进制)

    常见的数据解析(Json、XML、CSV、二进制)

    2024年02月21日
    浏览(31)
  • 【Unity】C# 创建/读取/解析JSON数据

    判断是否存在JSON数据文件没有则创建并保存

    2024年02月16日
    浏览(56)
  • 解析xml文件,获取需要的数据并写入txt文件中

    =_=  话不多说!直接上代码!=_= 1、XmlUtil.java     xml解析工具类  2、测试代码 解析xml方式还有很多种,这只是其中一种,可以参考:Java XML解析 - 利用dom(org.w3c.dom)解析XML  

    2024年02月14日
    浏览(26)
  • Unity学习笔记--数据持久化XML文件(1)

    Xml是可拓展标记语言,一种文件格式。我们使用xml来完成对数据持久化的存储。等待我们有一程序运行结束之后,将内存中的数据进行保存,(保存在硬盘/服务器)实现对数据的持久化存储。 xml文件的读取和保存以及修改 要点: XMl文件的加载 XML文件节点的查找访问 XML文件

    2024年02月05日
    浏览(34)
  • Unity文本框解析读取mqtt服务器JSON数据

    本次内容是讲述如何将mqtt服务器中接收到的数据在Unity3D的文本框控件中显示JSON键值对中的“值”。 需求: 1.GameObject——UI——Text (将Unity 3D的文本框控件置于场景) 命名空间引用: using UnityEngine.UI; 2. Newtonsoft插件 命名空间引用: Newtonsoft.Json.Linq; 3.MQTT通讯需求: (1)h

    2023年04月08日
    浏览(70)
  • Unity 数据读取|(二)多种方式读取文本文件

    在Unity3D中,我们经常会需要在本地或者服务器上读取游戏数据,Unity中读取文件的方式有很多种,写下此文章以做总结。 TextAsset是Unity 提供的一个文本对象,它可以通过 Resources.Load 或者 AssetBundle 来读取数据。 它支持读取的文本格式包括 . txt .html .htm .bytes .json .csv .yaml .fnt 。

    2024年02月04日
    浏览(62)
  • 读取JSON文件 如何在Unity中读取Json文件中的数据

    Josn是一种轻量级的数据交换格式,JSON能够描述四种简单的类型(字符串、数字、布尔值及null)和两种结构化类型(对象及数组),在Unity里经常用Json来处理大量的字符串,容易解析,效率非常快。 基本结构 1、语法 数据存在键值对中 数据由逗号分隔 花括号保存对象 方括号保存

    2024年02月15日
    浏览(32)
  • Java读取XML文件

    XML声明是XML文档的第一句,其格式如下 良好的XML文档必须只有一个根元素,就是紧接这声明后面接着的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。 在XML文档中,大小写是有区别的。\\\"A\\\"和\\\"a\\\"是不同的标记。 所有标记必须成对出现

    2024年02月08日
    浏览(45)
  • qt xml文件写入读取

    ****************************************************************************** QT       += core gui xml ****************************************************************************** #include \\\"mainwindow.h\\\" #include QDomDocument #include QTextStream #include QFile #include QDebug MainWindow::MainWindow(QWidget *parent)     : QMainWindow(parent) {    

    2024年02月09日
    浏览(25)
  • Java读取XML文本文件

    圆周率没有尽头,风景一直在路上 编写测试的xml文本文件 编码读取(可根据自己需求改写读取节点)

    2024年02月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包