Beispiel #1
0
 //============================================================
 // <T>加载对象节点设置。</T>
 //
 // @param parent 父对象
 // @param nodes 节点列表
 //============================================================
 protected virtual void LoadNodes(IXmlObject parent, FXmlNodes nodes)
 {
     if ((null != nodes) && !nodes.IsEmpty())
     {
         foreach (FXmlNode node in nodes)
         {
             FXmlObjectConfig config = _configs[node.Name];
             if (null != config)
             {
                 // 创建实例
                 IXmlObject instance = config.CreateInstance <IXmlObject>();
                 _context._parent = parent;
                 _context._config = node;
                 instance.LoadConfig(_context);
                 if (null != parent)
                 {
                     parent.Push(instance);
                 }
                 // 加载子节点
                 if (node.HasNode())
                 {
                     LoadNodes(instance, node.Nodes);
                 }
             }
         }
     }
 }
Beispiel #2
0
        //============================================================
        // <T>获得所有子节点。</T>
        //
        // @param name 节点名称
        // @param args 属性列表
        // @return 子节点列表
        //============================================================
        public FXmlNodes AllNodes(string name, params string[] args)
        {
            FXmlNodes nodes = new FXmlNodes();

            if (HasNode())
            {
                InnerFindAllNodes(nodes, this, name, args);
            }
            return(nodes);
        }
Beispiel #3
0
 //============================================================
 // <T>查找所有子节点。</T>
 //
 // @param nodes 子节点列表
 // @param node 子节点
 // @param name 节点名称
 // @param args 属性列表
 //============================================================
 protected void InnerFindAllNodes(FXmlNodes nodes, FXmlNode node, string name, params string[] args)
 {
     foreach (FXmlNode child in node.Nodes)
     {
         if (null != child)
         {
             if (child.Equals(name, args))
             {
                 nodes.Push(child);
             }
             if (child.HasNode())
             {
                 InnerFindAllNodes(nodes, child, name, args);
             }
         }
     }
 }
Beispiel #4
0
        //============================================================
        // <T>根据路径,查找节点对象。</T>
        //
        // @param path 路径
        // @param args 属性列表
        // @return 节点对象
        //============================================================
        public FXmlNode FindPath(string path, params string[] args)
        {
            FXmlNode  find   = null;
            FXmlNodes parent = this;

            foreach (string name in path.Split('.'))
            {
                foreach (FXmlNode node in parent)
                {
                    if (node.Equals(name, args))
                    {
                        find = node;
                        break;
                    }
                }
                if ((null != find) && find.HasNode())
                {
                    parent = find.Nodes;
                }
            }
            return(find);
        }
Beispiel #5
0
        public void LoadConfig(FXmlNode config)
        {
            Clear();
            FXmlNodes nodes = config.Nodes;

            if (nodes != null)
            {
                foreach (FXmlNode node in nodes)
                {
                    if (node.IsName(FCsvHead.HEAD_TYPE))
                    {
                        FCsvHead head = new FCsvHead();
                        head.LoadConfig(node);
                        Set(head.Name, head);
                    }
                }
            }
            // Dump
            if (_logger.DebugAble)
            {
                _logger.Debug(this, "LoadConfig", "Load all heads (count={0})", Count);
            }
        }