XML的unity读取

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<PlayerInfo>
    <name>shan</name>
    <atk>100</atk>
    <def>12</def>
    <moveSpeed>20</moveSpeed>
    <roundSpeed>30</roundSpeed>
	<money id="1" num="10"></money>
    <weapon>
        <id>1</id>
        <num>2</num>
    </weapon>
	<weapon>
		<id>2</id>
		<num>4</num>
	</weapon>
    <listInt>
         <int>1</int>
         <int>2</int>
         <int>3</int>
    </listInt>
    <itemList>
          <Item id="1" num="10"/>
          <Item id="2" num="20"/>
          <Item id="3" num="30"/>
    </itemList>
    <itemDic>
        <int>1</int>
        <Item id="1" num="1"/>
    </itemDic>
</PlayerInfo>

xml存储

只读不写的XML文件可以放在

Resources或者StreamingAssets文件夹下

动态存储的XML文件放在Application.persistentDataPath路径下

c#读取xml的方式

XmlDocument 把数据加载到内存中 方便读取

XmlTextReader 以流形式加载 内存占用更少 但是单向只读,使用不是特别方便,除非有特殊需求,否则不会使用

linq

通过XmlDocument读取xml文件 有两个API

1直接根据xml字符串内容 来加载xml文件

存放在Resource文件夹下的xml文件加载处理

cs 复制代码
XmlDoucument xml= new XmlDocument();
TextAsset asset=Resources.Load<TextAsset>("TestXml");
print(asset.text);
//通过这个方法,就能够翻译字符串为xml对象
xml.LoadXml(asset.text);

2 是通过xml文件的路径去进行加载

cs 复制代码
xml.Load(Application.streamingAssetsPath+"/TestXml.xml");

知识点二 读取元素和属性信息

节点信息类

XmlNode单个节点信息类

节点列表信息

XmlNodeList 多个节点信息类

获取xml当中的根节点

cs 复制代码
XmlNode root = xml.SelectSingleNode("PlayerInfo");

再通过根节点, 去获取下面的子节点

cs 复制代码
XmlNode nodeName = root.SelectSingleNode("name");
print(nodeName.InnerText);

读取属性 第一种

cs 复制代码
XmlNode nodeItem =root.SelectSingleNode("money");
print(nodeItem.Attributes["id"].Value);
print(nodeItem.Attributes["num"].Value);

读取属性 第二种

cs 复制代码
print(nodeItem.Attributes.GetNamedItem("id").Value);
print(nodeItem.Attributes.GetNamedItem("num").Value);
cs 复制代码
XmlNodeList friendList = root.SelectNodes("weapon");
foreach(XmlNode item in friendList)
{
    print(item.SelectSingleNode("id").InnerText);
    print(item.SelectSingleNode("num").InnerText);
}

for(int i = 0; i < friendList.Count; i++)
{
    print(friendList[i].SelectSingleNode("id").InnerText);
    print(friendList[i].SelectSingleNode("num").InnerText);
}