# Unity 編輯器選擇器工具類Selection 常用函數和用法 [;
針對遍歷和反序列化功能根據輸入源不同,XmlTool中為每個功能各自提供了 2 個方法。
Xml遍歷方法:
Iterate // 從文件載入Xml內容
IterateFromString // 從字元串載入Xml內容
Xml反序列化方法:
Deserialize // 從文件載入Xml內容
DeserializeFromString // 從字元串載入Xml內容
1. Iterate
public void Iterate(string file, XmlNodeInfoGetter callback = null)
說明:從指定文件載入Xml內容併進行遍歷,用戶通過回調函數獲取遍歷信息
參數:
file: Xml文件全路徑。
callback:XmlNodeInfoGetter類型回調函數,用於Xml節點和屬性的讀取。
<!--c:\demo.xml-->
<xml>
<item name="Karl">It's a dog.</item>
<item name="Tom">It's a cat.</item>
</xml>
private string mTomContent = "";
private bool XmlReader(XmlNodeInfo node)
{
if (!node.IsEndNode)
{
if (node.Path == "/xml/item") // 當前節點是否/xml/item節點
{
if (node.GetAttribute("name") == "Tom") // 當前節點name屬性是否為Tom
{
mTomContent = node.Text; // 獲取Tom的說明文本
return false; // 退出遍歷
}
}
}
return true;
}
public void GetTomContent(string file)
{
XmlTool xml = Xmtool.Xml();
xml.Iterate(file, XmlReader)
}
ReadXml("c:\demo.xml");
Console.WriteLine(mTomContent)
2. IterateFromString
public void Iterate(string content, XmlNodeInfoGetter callback = null)
說明:從指定字元串載入Xml內容併進行遍歷,用戶通過回調函數獲取遍歷信息
參數:
content: Xml格式的字元串內容。
callback:XmlNodeInfoGetter類型回調函數,用於Xml節點和屬性的讀取。
string xmlData = @"<xml>
<name>張三</name>
<age>18</age>
<gender>男</gender>
</xml>";
XmlTool xml = Xmtool.Xml();
xml.IterateFromString(xmlData, (XmlNodeInfo node) =>
{
if (!node.IsEndNode)
{
if (node.Path = "/xml/age")
{
Console.WriteLine("張三的年齡為:" + node.Text);
return false;
}
}
return true;
})
3. Deserialize
public dynamic Deserialize(string file, bool includeRoot = false)
說明:從指定文件載入Xml內容併進行解析,將解析內容反序列化為動態對象;暫不支持包含同層級同名稱節點的Xml內容反序列化。
參數:
file: Xml文件全路徑。
includeRoot:反序列化時是否包含根節點。
<!--c:\demo.xml-->
<person>
<name>張三</name>
<age>18</age>
</person>
XmlTool xml = Xmtool.Xml();
dynamic person = xml.Deserialize("c:\demo.xml", false);
Console.WriteLine("張三的年齡為:" + person.name.Value);
4. DeserializeFromString
public dynamic DeserializeFromString(string xml, bool includeRoot = false)
說明:從字元串內容載入Xml併進行解析,將解析內容反序列化為動態對象;暫不支持包含同層級同名稱節點的Xml內容反序列化。
參數:
content: Xml格式的字元串內容。
includeRoot:反序列化時是否包含根節點。
string xmlData = @"<xml>
<person age="18" gender="男">張三</person>
</xml>";
XmlTool xml = Xmtool.Xml();
dynamic person = xml.DeserializeFromString(xmlData);
Console.WriteLine("張三的年齡為:" + person.person.age);
附件說明
XmlNodeInfoGetter回調函數
public delegate bool XmlNodeInfoGetter(XmlNodeInfo nodeInfo);
說明:Xml遍歷回調函數;Xml遍歷到每個節點就會回調該方法一次,參數是遍歷到的當前節點。
參數:
nodeInfo:當前節點信息。
名稱 | 類型 | 說明 |
Path | 屬性 | 當前節點路徑,同名路勁不區分;如:/xml/item |
FullPath | 屬性 | 當前節點路徑,區分同名路徑;如:/xml/item[1] |
LocalName | 屬性 | 節點去掉首碼的名稱;如:\ |
FullName | 屬性 | 節點全名稱;如:\ |
NamespaceURI | 屬性 | 當前節點名稱首碼對應的命名空間地址;沒有首碼為空。 |
IsRoot | 屬性 | 當前節點是否根節點。 |
IsNode | 屬性 | 當前是否節點,起始節點或結束節點。 |
IsEndNode | 屬性 | 當前節點是否為結束節點;如:\ |
IsEmptyNode | 屬性 | 當前節點是否一個空節點;如:\ |
IsTextNode | 屬性 | 當前節點是否一個字元內容的節點。 |
IsCDATANode | 屬性 | 當前節點是否一個CDATA節點;如:\ |
Text | 屬性 | 當前節點的的字元串內容;需IsTextNode為true時有效。 |
CData | 屬性 | 當前節點的CDATA內容;需IsCDATANode為true時有效。 |
Level | 屬性 | 當前節點的深度層級。 |
Line | 屬性 | 當前節點在文件中的所在行數。 |
AttributeCount | 屬性 | 當前節點包含屬性的個數。 |
HasAttributes() | 方法 | 當前節點是否包含屬性。 |
GetAttribute(int index) | 方法 | 返回屬性位置為index的屬性值。 |
GetAttribute(string name) | 方法 | 返回屬性名稱為name的屬性值。 |
GetAttribute(string name, string namesapceURI) | 方法 | 返回屬性名為name,且name命名空間為namespaceURI的屬性值。 |
GetAttributeName(int index) | 方法 | 返回屬性位置為index的屬性名稱。 |