您的位置:首页 > 移动开发 > Unity3D

[Unity菜鸟] Unity读XML

2014-06-05 20:10 169 查看
1. 在Unity中调试可行,发布成exe可行,发布成web不行

Application.dataPath 在Unity中调试是在“..Assets”文件夹下, 发布成exe文件是在“..yourName_Data”文件夹下

using UnityEngine;
using System.Collections;
using System.Xml;

public class CallXml
{
//XML文件路径 在Unity中调试
public static string localUrl = Application.dataPath + "/CallExe.xml";

public static XmlDocument ReadAndLoadXml()
{
XmlDocument doc = new XmlDocument();
//Debug.Log("加载xml文档");
doc.Load(localUrl);
return doc;

}

public static string GetPath(string tagName)
{
string _path = "";
XmlDocument xmlDoc = ReadAndLoadXml();
XmlNode provinces = xmlDoc.SelectSingleNode("xml"); //顶层节点

foreach (XmlNode province in provinces)
{
XmlElement _province = (XmlElement)province;

if (tagName == _province.GetAttribute("name"))
{
//根据传入的tagName获取路径
_path = _province.GetAttribute("path");
}
}
return _path;
}
} 


调用程序(unity中测试时,发布exe时调用)

Process proc = new Process();
// unity中和发布exe时调用
proc.StartInfo.FileName = CallXml.GetPath("one");
proc.Start();


//可以用下面代码直接调用程序
System.Diagnostics.Process.Start("notepad");
Process.Start(@"C:\Users\DELL\Desktop\123.txt");

//但当报如下错误提示时,就要用上述方式调用程序
error CS0120: An object reference is required to access non-static member `System.Diagnostics.Process.Start()'


  

2. 发布成web之后调用xml里的文件

using UnityEngine;
using System.Collections;
using System.Xml;

public class CallXmlWeb : MonoBehaviour {

private static WWW _statusFile;

// Use this for initialization
IEnumerator Start ()
{
yield return StartCoroutine(ReadXML());
print(_statusFile.text);
}

private IEnumerator ReadXML()
{
yield return _statusFile = new WWW(Application.dataPath + "/CallExe.xml");
}

public static XmlDocument ReadAndLoadXml()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(_statusFile.text);
return xmlDoc;
}

//根据节点名,读取节点中的值
public static string GetPath(string tagName)
{
string _path = "";
XmlDocument xmlDoc = ReadAndLoadXml();
XmlNode provinces = xmlDoc.SelectSingleNode("xml"); //顶层节点

foreach (XmlNode province in provinces)
{
XmlElement _province = (XmlElement)province;

if (tagName == _province.GetAttribute("name"))
{
//根据传入的tagName获取路径
_path = _province.GetAttribute("path");
}
}
return _path;
}
}


  

调用程序(发布web时调用)

注意1: 此时用下面代码调用不会有结果,因为web的安全机制,不能随便调用本地程序。 传入路径/xx/xx.exe等也不行,网上有其它的解决方法。

proc.StartInfo.FileName = CallXmlWeb.GetPath("notepad");


 但可以用GetPath("notepad");读取到XML文件里面的内容

注意2:从其他函数调用此函数时,读取不到XML里的内容,在一个函数内部测试就可以,暂不知道原因。

3. XML文件CallExe.xml

<?xml version="1.0" encoding="utf-8"?>
<xml>
<tag name ="notepad" path ="notepad"> </tag>
<tag name ="qq" path ="C:\Program Files (x86)\Tencent\QQ\QQProtect\Bin\QQProtect.exe"> </tag>
<tag name ="jisuanqi" path ="calc"> </tag>
</xml>


  

参考:Unity3D读取XML文档信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: