在整个XML处理过中,需要使用到的几个类的关系图:
XMLNode 为抽象类,还实现了如下接口
public abstract class XmlNode : ICloneable, System.Collections.IEnumerable, System.Xml.XPath.IXPathNavigable
注:该类实现了W3C文档对象模型(DOM)1级核心和Core DOM级别2.DOM是XML文档的内存(高速缓存)树表示显示。是DOM的.NET实现基类,它支持XPath选择并提供编辑功能,,,
它的属性:
Attributes :(只读)
返回去一个XmlAttributeCollection含有该节点的属性,,如果节点类型是XmlAttributeCollection,则返回节点的属性,否则,此属性返回null;
public virtual System.Xml.XmlAttributeCollection Attributes { get; }
BaseURI:
返回 串,节点的加载位置,如果没有节点基本URL,则为String.Empty
public virtual string BaseURI { get; }
ChildNodes : 获得所有子节点
public virtual System.Xml.XmlNodeList ChildNodes { get; }
XMLElement 主要是针对节点的一些属性进行操作
下面简单介绍它的属性,方法:
public override System.Xml.XmlAttributeCollection Attributes { get; }
public virtual bool HasAttributes { get; }
public override string InnerText { get; set; }
public override string InnerXml { get; set; }
ParentNode :获取节点的父节点
CloneNode() :创建此节点的副本
public override System.Xml.XmlNode CloneNode (bool deep);
public virtual string GetAttribute (string name);
public virtual System.Xml.XmlAttribute GetAttributeNode (string name);
注:我想您看到这里也觉得有些烦了,,既然有获取(get)那肯定有设置(set),还有删除等方法,这里不再赘述,想了解具体一点可以去查MSDN
XMLDocument 主要是针对节点的CUID(用户识别号)操作
下面列举出个人人为比较常用的属性,方法:
public override string InnerText { set; }
public override string InnerXml { get; set; }
public System.Xml.XmlAttribute CreateAttribute (string name);
public virtual System.Xml.XmlNode CreateNode (string nodeTypeString, string name, string namespaceURI);
//参数是:包含要加载的XML文档的流。
public virtual void Load (System.IO.Stream inStream);
//参数是:从指定的TextReader加载XML文档。
public virtual void Load (System.IO.TextReader txtReader);
//参数是:包含要加载的XML文档的文件的URL。URL可以是本地文件或HTTP URL(Web地址)
//好理解,经常用
public virtual void Load (string filename);
//注释同上段代码
public virtual void Save (System.IO.Stream outStream);
public virtual void Save (System.IO.TextWriter writer);
public virtual void Save (string filename);
简单使用:
using System.Xml;
using UnityEngine;
public class XmlHandler : MonoBehaviour {
XmlDocument Xdoc = null;
void Start()
{
Xdoc = new XmlDocument(); //实例化
Debug.Log("当前目录是:" + Application.dataPath);
Xdoc.Load(Application.dataPath + "/data.xml"); //加载XML 文件
XmlElement root = Xdoc.DocumentElement; //获取跟节点
Debug.Log("根元素是:"+ root.Name);
XmlNode dataNode = root.SelectSingleNode("data"); //获取根节点下的子节点
Debug.Log("节点名称"+dataNode.Name);
for (int i = 0; i < dataNode.ChildNodes.Count; i++)
{
XmlElement xmElement = dataNode.ChildNodes[i] as XmlElement;
if(xmElement.GetAttribute("id") == "1")
{
Debug.Log(dataNode.InnerXml); //节点下的内容(string)
Debug.Log("文本内容:"+dataNode.ChildNodes[i].InnerText); //获取文本内容
xmElement.SetAttribute("id", "3"); //属性更改id值
}
}
//保存更改后的xml文件,,
Xdoc.Save(Application.dataPath + "/data.xml");
//如果这样写的话,会得到一个新的xml文件,,而原来的文件将不会被改变
//Xdoc.Save(Application.dataPath + "/data1.xml");
}
}