//============================================================ // <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); } } } } }
//============================================================ // <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); }
//============================================================ // <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); } } } }
//============================================================ // <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); }
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); } }