XML的使用

XML数据生成和解析

  1. XML 指可扩展标记语言(EXtensible Markup Language)

  2. XML 是一种标记语言,很类似 HTML

  3. XML 的设计宗旨是传输数据,而非显示数据

XML结构

每个标签内部可以有多个属性。标签可以层层嵌套,形成一个树形

结构。

例如:

18

5

30

以上Alarm(元素节点),lock(属性节点),Time(元素节点), StringValue(文本节点)都是节点(Node),

但是只有……

是元素(Element)

XML常用的类

  1. XmlDocument——XML文件类2. XmlNode——XML节点类

  2. XmlAttribute——XML属性类4. XmlElement——XML元素类

XmlNode

XmlDocument

XmlElement

Xml数据生成步骤

在Unity引擎中如何生成本地XML数据?

第一步:引用C#的命名空间 System.Xml

第二步:生成XML文档(XmlDocument 类)

第三步:生成根元素(XmlElement类)添加给文档对象第四步:循环生成子元素添加给父元素

第五步:将生成的XML文档保存

Xml数据生成示例

//创建xml文件对象

XmlDocument doc = newXmlDocument();

//创建xml头

XmlNode xmldct =doc.CreateXmlDeclaration (“1.0”, “utf-8”, null);

//添加xml头

doc.AppendChild (xmldct);

//创建xml根节点(元素属于节点)users

XmlNode root =doc.CreateElement(“users”);

//添加xml根节点

doc.AppendChild (root);

//创建子节点

XmlNode xn_element =doc.CreateNode (XmlNodeType.Element, “name”, null); //设置子节点的值

xn element.InnerText =“Albert”;

//创建属性

XmlAttribute xa =doc.CreateAttribute (“no”);

//设置属性值

xa.Value =“1234”;

//获取元素的docment

XmlDocument xd = xnelement.OwnerDocument;

_

//设置元素属性

xnelement.Attributes.SetNamedItem (xa);

_

//添加子节点到root节点

root.AppendChild (xn_element);

//保存xml

doc.Save(Application.dataPath+ “/test.xml”);

Xml序列化

序列化是将对象状态转换为可保持或传输的格式的过程。

我们可以把对象序列化为不同的格式,比如说,Json序列化、XML序列化、二进制序列化等,以上这些不同的格式也都是为了适应具体的业务需求。

public class BaseInfo {

//BaseInfo对象中保存Person对象

List perList = newList(); //创建元素节点

[XmlElement(ElementName=“Perosn”)]publicList PerList

{

get

{

return perList;

}

set

{

perList = value;

}

}

}

//用于将信息写入字符串

StringWriter sw = newStringWriter();

//指定 Xml序列化名字空间

XmlSerializerNamespacesns = new XmlSerializerNamespaces();ns.Add("", “”);

//声明Xml序列化对象实例serializer,对BaseInfo类 进行序列化

XmlSerializer serializer= new XmlSerializer(typeof(BaseInfo));

//使用 StringWriter 和指定的名字空间 将BaseInfo 对象写入Xml文件

serializer.Serialize(sw,baseInfo, ns);

sw.Close();

反序列化示例

//根据指定路径读取,实例化FileStream对象

FileStream fs = newFileStream(Application.dataPath +

“/Practise5/test.xml”,FileMode.Open,FileAccess.Read);

//指定反序列化的类型

XmlSerializer serializer= new XmlSerializer(typeof(BaseInfo));BaseInfo baseInfo =(BaseInfo)serializer.Deserialize(fs);

fs.Close();

//遍历baseinfo对象中的信息,输出到控制台

for (int i = 0; i <baseInfo.PerList.Count; i++)

{

Person per =baseInfo.PerList[i];

Debug.Log(“名字: “+ per.Name +”, 年龄:”+per.Age );

for (int j = 0; j <per.BooksList.Count; j++)

{

Books books =per.BooksList[ j];

for (int k = 0; k <books.BookList.Count; k++)

{

Book book =books.BookList[k];

Debug.Log(“书名: “+book.Title+”, 价格:”+book.Price);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值