一、 的解析

首先新建一个 ,可以命名为item. ,拖进assets中Resources里面,内容如下:

<item>
  <item1>
    <id>1</id>
    <name>china</name>
    <year>2016</year>
  </item1>
  <item2>
    <id>2</id>
    <name>usa</name>
    <year>2017</year>
  </item2>
</item>

通过这个 来解析。然后写一个.cs文件,注意需要导入这两个头文件

using System. ;     // 操作  文件的命名空间
using System.IO;     //file操作  对文件的读取,保存操作;

解析函数如下:

//解析 
    void parse (){
        //也可以前面加上@,区别就是有@的话,双引号里面的内容不转义,比如\" \\\" \"
        //string filePath = Application.dataPath+@\"/Resources/item. \";
        string filePath = Application.dataPath+\"/Resources/item. \";
        if(File.Exists(filePath)){
             Document  Doc = new  Document();
             Doc.Load(filePath);
             NodeList node =  Doc.SelectSingleNode(\"item\").ChildNodes;
            //遍历节点
            foreach( Element ele in node){
                //item下面的节点
                Debug.Log(ele.Name);

                if(ele.Name == \"item1\"){
                //first item1
                    foreach( Element i1 in ele.ChildNodes){
                        Debug.Log(i1.Name);
                        if(i1.Name == \"id\"){
                            id1 = i1.InnerText;
                        }
                        if(i1.Name == \"name\"){
                            name1 = i1.InnerText;
                        }
                        if(i1.Name==\"year\"){
                            year1 = i1.InnerText;
                        }
                    }
                }
                if(ele.Name == \"item2\"){
                    //first item1
                    foreach( Element i2 in ele.ChildNodes){
                        Debug.Log(i2.Name);
                        if(i2.Name == \"id\"){
                            id2 = i2.InnerText;
                        }
                        if(i2.Name == \"name\"){
                            name2 = i2.InnerText;
                        }
                        if(i2.Name==\"year\"){
                            year2 = i2.InnerText;
                        }
                    }
                }

            }
        }
        Debug.Log(\"id1:  \"+id1);
        Debug.Log(\"name1:  \"+name1);
        Debug.Log(\"year1:  \"+year1);
        Debug.Log(\"id2:  \"+id2);
        Debug.Log(\"name2:  \"+name2);
        Debug.Log(\"year2:  \"+year2);
    }

通过解析即可得到 的值
\"在这里插入图片描述\"

后面的增删改一般都是策划直接修改表,而不用代码修改,但是还是可以看看。

二: 文件创建、读取、修改、添加

using UnityEngine;
using System.Collections;
using System. ;
using System.IO;

public class  Demo : MonoBehaviour {
    private ArrayList Adialogue = new ArrayList();
    private ArrayList Bdialogue = new ArrayList();
    private ArrayList textList = new ArrayList();
    // Use this for initialization
    void Start () {


    }

    // Update is called once per  
    void Update () {

    }

    void OnGUI() {
        if (GUI.Button(new Rect(50, 50, 100, 50), \"生成 \"))
        {
            Create ();
            Debug.Log(\"生成 \");
        }

        if (GUI.Button(new Rect(50, 100, 100, 50), \"读取 \"))
        {
            Load ();
            Debug.Log(\"读取 \");
        }

        if (GUI.Button(new Rect(50, 150, 100, 50), \"修改 \"))
        {
            update ();
            Debug.Log(\"修改 \");

        }

        if (GUI.Button(new Rect(50, 200, 100, 50), \"增加 节点\"))
        {
            add Data();
            Debug.Log(\"增加 \");
        }
    }

//创建 
 void Create ()
    {
        string path = Application.dataPath + \"/data2. \";
        if (!File.Exists(path))
        {
            //创建最上一层的节点。
             Document   = new  Document();
            //创建最上一层的节点。
             Element root =  .CreateElement(\" s\");
            //创建子节点
             Element element =  .CreateElement(\"messages\");
            //设置节点的属性
            element.SetAttribute(\"id\", \"1\");
             Element elementChild1 =  .CreateElement(\"contents\");

            elementChild1.SetAttribute(\"name\", \"a\");
            //设置节点内面的内容
            elementChild1.InnerText = \"这就是你,你就是天狼\";
             Element elementChild2 =  .CreateElement(\"mission\");
            elementChild2.SetAttribute(\"map\", \"abc\");
            elementChild2.InnerText = \"去吧,少年,去实现你的梦想\";
            //把节点一层一层的添加至 中,注意他们之间的先后顺序,这是生成 文件的顺序
            element.AppendChild(elementChild1);
            element.AppendChild(elementChild2);
            root.AppendChild(element);
             .AppendChild(root);
            //最后保存文件
             .Save(path);
        }
    }

//读取 
 void Load ()
    {
        //创建 文档
         Document   = new  Document();

         .Load(Application.dataPath + \"/data2. \");
        //得到 s节点下的所有子节点
         NodeList  NodeList =  .SelectSingleNode(\" s\").ChildNodes;
        //遍历所有子节点
        foreach ( Element xl1 in  NodeList)
        {

            if (xl1.GetAttribute(\"id\") == \"1\")
            {
                //继续遍历id为1的节点下的子节点
                foreach ( Element xl2 in xl1.ChildNodes)
                {
                    //放到一个textlist文本里
                    //textList.Add(xl2.GetAttribute(\"name\") + \": \" + xl2.InnerText);
                    //得到name为a的节点里的内容。放到TextList里
                    if (xl2.GetAttribute(\"name\") == \"a\")
                    {
                        Adialogue.Add(xl2.GetAttribute(\"name\") + \": \" + xl2.InnerText);
                        print(\"******************\"+ xl2.GetAttribute(\"name\") + \": \" + xl2.InnerText);
                    }
                    //得到name为b的节点里的内容。放到TextList里
                    else if (xl2.GetAttribute(\"map\") == \"abc\")
                    {
                        Bdialogue.Add(xl2.GetAttribute(\"name\") + \": \" + xl2.InnerText);
                        print(\"******************\" + xl2.GetAttribute(\"name\") + \": \" + xl2.InnerText);
                    }
                }
            }
        }
        print( .Outer );
    }

//修改 
    void update ()
    {
        string path = Application.dataPath + \"/data2. \";
        if (File.Exists(path))
        {
             Document   = new  Document();
             .Load(path);
             NodeList  NodeList =  .SelectSingleNode(\" s\").ChildNodes;
            foreach ( Element xl1 in  NodeList)
            {
                if (xl1.GetAttribute(\"id\") == \"1\")
                {
                    //把messages里id为1的属性改为5
                    xl1.SetAttribute(\"id\", \"5\");
                }

                if (xl1.GetAttribute(\"id\") == \"2\")
                {
                    foreach ( Element xl2 in xl1.ChildNodes)
                    {
                        if (xl2.GetAttribute(\"map\") == \"abc\")
                        {
                            //把mission里map为abc的属性改为df,并修改其里面的内容
                            xl2.SetAttribute(\"map\", \"df\");
                            xl2.InnerText = \"我成功改变了你\";
                        }

                    }
                }
            }
             .Save(path);
        }
    }

//添加 
    void add Data()
    {
        string path = Application.dataPath + \"/data2. \";
        if (File.Exists(path))
        {
             Document   = new  Document();
             .Load(path);
             Node root =  .SelectSingleNode(\" s\");
            //下面的东西就跟上面创建 元素是一样的。我们把他复制过来就行了
             Element element =  .CreateElement(\"messages\");
            //设置节点的属性
            element.SetAttribute(\"id\", \"2\");
             Element elementChild1 =  .CreateElement(\"contents\");

            elementChild1.SetAttribute(\"name\", \"b\");
            //设置节点内面的内容
            elementChild1.InnerText = \"天狼,你的梦想就是。。。。。\";
             Element elementChild2 =  .CreateElement(\"mission\");
            elementChild2.SetAttribute(\"map\", \"def\");
            elementChild2.InnerText = \"我要妹子。。。。。。。。。。\";
            //把节点一层一层的添加至 中,注意他们之间的先后顺序,这是生成 文件的顺序
            element.AppendChild(elementChild1);
            element.AppendChild(elementChild2);

            root.AppendChild(element);

             .AppendChild(root);
            //最后保存文件
             .Save(path);
        }
    }

出处:https://www.cnblogs.com/NBOWeb/p/8968036.html

收藏 打印