예제 #1
0
    public PmlElement Load(string path)
    {
        TextAsset  xmlFile = Resources.Load <TextAsset>(path);
        PmlElement data;

        if (_loadedElements.TryGetValue(path, out data))
        {
            return(data);
        }

        try
        {
            MemoryStream assetStream = new MemoryStream(xmlFile.bytes);
            XmlReader    reader      = XmlReader.Create(assetStream);
            XmlDocument  xmlDoc      = new XmlDocument();
            xmlDoc.Load(reader);

            XmlNodeReader node = new XmlNodeReader(xmlDoc);
            Debug.Log("XML \'" + path + "\' has loaded.");

            // Read the nodes recursively
            data = new PmlElement();
            ReadNodes(node, data);

            node.Close();

            _loadedElements.Add(path, data);
        }
        catch (Exception ex)
        {
            Debug.LogError("Error loading " + path + ":\n" + ex);
        }

        return(data);
    }
예제 #2
0
    PmlElement ReadNodes(XmlNodeReader node,
                         PmlElement data,
                         string path        = "",
                         string elementName = "")
    {
        while (node.Read())
        {
            if (node.NodeType == XmlNodeType.Element)
            {
                string type = node.GetAttribute("type");
                // Directory element
                if ((type ?? string.Empty).Equals("dir", StringComparison.OrdinalIgnoreCase))
                {
                    ReadNodes(node, data,
                              (string.IsNullOrEmpty(path) ? string.Empty : (path + "/")) + node.Name,
                              node.Name);
                }
                // Link element
                else if ((type ?? string.Empty).Equals("link", StringComparison.OrdinalIgnoreCase))
                {
                    string     linkPath = node.GetAttribute("path");
                    PmlElement linkedElement;
                    if (!_loadedElements.TryGetValue(linkPath, out linkedElement))
                    {
                        linkedElement = Load(linkPath);
                    }
                    data.Add((path + "/" + node.Name).ToLower(), linkedElement.GetStringValue(node.GetAttribute("data")));
                }
                // Common data element
                else
                {
                    data.Add((path + "/" + node.Name).ToLower(), node.ReadString());
                }
            }
            else if (node.NodeType == XmlNodeType.Element)
            {
                if (node.Name.Equals(elementName, StringComparison.OrdinalIgnoreCase))
                {
                    break;
                }
            }
        }

        return(data);
    }
예제 #3
0
 public CciCommand Return(PmlElement pml)
 {
     return(Return(CciResultType.Pml, pml));
 }