XML解析
用到了一下内容:
1.Application.dataPath——数据路径(Assets目录)
- File.Exists ——判断文件是否存在
- XmlDocument ——Xml文件
- XmlDeclaration——Xml声明
- XmlElement——Xml元素
- CreateXmlDeclaration——创建Xml声明
- CreateElement——创建元素
- AppendChild——附加子物体
- SetAttribute——设置属性
- GetAttribute—— 获得属性
10.InnerText——内部文本 - Load—— 加载
- SelectSingleNode——选择单个节点
- ChildNodes——子节点
- RemoveAll——移除所有
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Xml;
using System.IO;
using UnityEditor;
public class XmlTest : MonoBehaviour
{
private void Start()
{
CreateXml();
UpdateXml();
OnAddXml();
OnDeleteXml();
OnShowXml();
AssetDatabase.Refresh();
}
/// <summary>
/// 创建
/// </summary>
public void CreateXml()
{
//创建解析路径
string xmlPath = Application.dataPath + "/XmlDate/myxml.xml";
//如果当前路径不存在
if (!File.Exists(xmlPath))
{
//创建解析文档实例
XmlDocument xmlDocument = new XmlDocument();
//创建描述性信息
XmlDeclaration xmlDec = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);
//把描述信息作为实例的子节点
xmlDocument.AppendChild(xmlDec);
//创建root节点,也就是最上层节点
XmlElement root = xmlDocument.CreateElement("transform");
//继续创建下一层节点
XmlElement xmlElement = xmlDocument.CreateElement("translate");
//设置节点的两个属性id和name
xmlElement.SetAttribute("id", "1");
xmlElement.SetAttribute("name", "QQ");
//设置属性
//继续创建下一层节点
XmlElement translate_x = xmlDocument.CreateElement("X");
//设置节点中的数值
translate_x.InnerText = "100";
XmlElement translate_y = xmlDocument.CreateElement("Y");
translate_y.InnerText = "100";
XmlElement translate_z = xmlDocument.CreateElement("Z");
translate_z.InnerText = "100";
//将值设置为xmlElent的子物体
//把节点根据层级关系一层一层添加到XMLDoc中
//注意先后顺序,根据顺序生成xml文件
xmlElement.AppendChild(translate_x);
xmlElement.AppendChild(translate_y);
xmlElement.AppendChild(translate_z);
XmlElement xmlElement1 = xmlDocument.CreateElement("Scale");
xmlElement1.SetAttribute("name", "df");
xmlElement1.SetAttribute("性别", "女");
XmlElement scale_x = xmlDocument.CreateElement("X");
scale_x.InnerText = "56";
XmlElement scale_y = xmlDocument.CreateElement("Y");
scale_y.InnerText = "78";
XmlElement scale_z = xmlDocument.CreateElement("Z");
scale_z.InnerText = "78";
xmlElement1.AppendChild(scale_x);
xmlElement1.AppendChild(scale_y);
xmlElement1.AppendChild(scale_z);
//将xmlElement设置为root子物体
root.AppendChild(xmlElement);
root.AppendChild(xmlElement1);
//
xmlDocument.AppendChild(root);
//将xml文件保存到目录下
xmlDocument.Save(xmlPath);
Debug.Log("创建成功");
}
}
/// <summary>
/// 更新数据
/// </summary>
public void UpdateXml()
{
//xml保存的路径
string filepath = Application.dataPath + "/XmlDate/myxml.xml";
//判断当前路径下是否有该文件
if (File.Exists(filepath))
{
//创建xml文档实例
XmlDocument xmlDoc = new XmlDocument();
//根据路径读取xml文件数据
xmlDoc.Load(filepath);
//得到transform下的所有子节点
//获取子节点
XmlNodeList xmlNodeList = xmlDoc.SelectSingleNode("transform").ChildNodes;
//遍历所有的子节点
foreach (XmlElement item in xmlNodeList)
{
if (item.GetAttribute("name") == "1212123")
{
item.SetAttribute("name", "1212123");
item.SetAttribute("性别", "男");
//foreach (XmlElement xmlElement in item.ChildNodes)
//{
//if (xmlElement.Name=="X")
//{
// item.InnerText = "66";
//}
item.InnerText = "12345689";
//}
}
//拿到节点中属性id=1的节点
//如果id=1
if (item.GetAttribute("id") == "1")
{
//更新节点中的id和name的参数
//设置id=2 SetAttribute:设置属性
item.SetAttribute("id", "2");
item.SetAttribute("name", "SS");
//继续遍历id=2中的子节点
foreach (XmlElement xmlElement in item.ChildNodes)
{
//修改节点为x的数值
if (xmlElement.Name == "X")
{
xmlElement.InnerText = "99";
}
//修改节点为y的值
if (xmlElement.Name == "Y")
{
xmlElement.InnerText = "99";
}
//修改节点为z的数值
if (xmlElement.Name == "Z")
{
xmlElement.InnerText = "99";
}
}
}
}
//保存xml
xmlDoc.Save(filepath);
Debug.Log("UpdateXml Success!");
}
}
/// <summary>
/// 增加
/// </summary>
public void OnAddXml()
{
//xml保存路径
string filePath = Application.dataPath + "/XmlDate/myxml.xml";
//判断当前路径下是否有该文件
if (File.Exists(filePath))
{
//创建xml文档实例
XmlDocument xmlDocument = new XmlDocument();
//根据路径将xml读取出来
xmlDocument.Load(filePath);
//获取transform的根节点
XmlNode xmlNode = xmlDocument.SelectSingleNode("transform");
//创建scale的子节点
XmlElement xmlElement = xmlDocument.CreateElement("Rotation");
//设置子节点的两个属性id和name
xmlElement.SetAttribute("id", "3");
xmlElement.SetAttribute("name", "DD");
//创建三个子节点
//分别为x,y,z
//同时给这三个子节点设置数值
XmlElement scale_x = xmlDocument.CreateElement("X");
scale_x.InnerText = "88";
XmlElement scale_y = xmlDocument.CreateElement("Y");
scale_y.InnerText = "88";
XmlElement scale_z = xmlDocument.CreateElement("Z");
scale_z.InnerText = "88";
//创建子节点的层级关系
xmlElement.AppendChild(scale_x);
xmlElement.AppendChild(scale_y);
xmlElement.AppendChild(scale_z);
xmlNode.AppendChild(xmlElement);
xmlDocument.AppendChild(xmlNode);
//保存xml文件,将其保存在目录下
xmlDocument.Save(filePath);
print("添加成功");
}
}
/// <summary>
/// 删除
/// </summary>
public void OnDeleteXml()
{
//创建一个路径
string filePath = Application.dataPath + "/XmlDate/myxml.xml";
//判断该路径下文件是否存在
if (File.Exists(filePath))
{
//创建xml文档实例
XmlDocument xmlDocument = new XmlDocument();
//根据路径读取xml文件
xmlDocument.Load(filePath);
//得到transform所有的子节点
XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("transform").ChildNodes;
//遍历所有子节点
foreach (XmlElement item in xmlNodeList)
{
//判断子节点的属性id是否等于2
//拿到节点中属性id=2的节点
if (item.GetAttribute("id") == "2" || item.GetAttribute("id") == "3")
{
//移除节点的属性id
//item.RemoveAttribute("id");
//在xmlNodeList的子节点内循环
foreach (XmlElement xl in item.ChildNodes)
{
//把节点x中的数值移除
if (xl.Name == "X")
{
xl.RemoveAll();
}
if (xl.Name == "Y")
{
//xl.RemoveAll();
}
if (xl.Name == "Z")
{
//xl.RemoveAll();
}
}
}
}
//保存
xmlDocument.Save(filePath);
Debug.Log("Delete Success!");
}
}
public void OnShowXml()
{
//创建路径
string filePath = Application.dataPath + "/XmlDate/myxml.xml";
//判断路径下文件是否存在
if (File.Exists(filePath))
{
//创建一个实例
XmlDocument xmlDocument = new XmlDocument();
//根据路径读取文件
xmlDocument.Load(filePath);
//得到transform下所有子节点
XmlNodeList xmlNodeList = xmlDocument.SelectSingleNode("transform").ChildNodes;
//遍历所有子节点
foreach (XmlElement item in xmlNodeList)
{
//得到节点中id=2或者id=3的节点
if (item.GetAttribute("id") == "2" || item.GetAttribute("id") == "3")
{
//遍历属性id=2或3的所有子节点
foreach (XmlElement xmlElement in item.ChildNodes)
{
//得到节点y下的数值
if (xmlElement.Name == "Y")
{
Debug.Log(xmlElement.InnerText);
}
}
}
}
}
}
}