//============================================================ // <T>构造文档。</T> // // @param assembly 模块对象 // @param name 资源名称 //============================================================ protected void InnerConstruct() { // 构造根节点 _root = new FXmlNode(RXml.ROOT_NAME); _root._document = this; // 构造根元素 _element = new FXmlElement(); _element._document = this; _element.Push(_root); }
//============================================================ // <T>从文档节点中建立哈希表。</T> // // @param parent 文档元素 // @param map 文档节点哈希表 //============================================================ public static void BuildMap(FXmlNode parent, FXmlNodeMap map) { if ((parent != null) && parent.HasNode()) { foreach (FXmlNode node in parent.Nodes) { map.Set(node.Name, node); } } }
//============================================================ // <T>从文档节点中建立属性表。</T> // // @param parent 文档元素 // @param attributes 属性列表 //============================================================ public static void BuildAttributes(FXmlNode parent, FAttributes attributes) { if ((parent != null) && parent.HasNode()) { foreach (FXmlNode node in parent.Nodes) { attributes[node.Name] = node.Text; } } }
//============================================================ // <T>在当前节点下,查找指定节点名称的节点内容。</T> // // @param name 节点名称 // @param args 属性列表 // @return 节点内容 //============================================================ public string FindText(string name, params string[] args) { if (null != _nodes) { FXmlNode node = _nodes.Find(name, args); if (null != node) { return(node.Text); } } return(null); }
//============================================================ // <T>从文档节点中建立哈希表。</T> // // @param parent 文档元素 // @param map 文档节点哈希表 // @param name 节点名称 // @param attrName 属性名称 //============================================================ public static void BuildMap(FXmlNode parent, FXmlNodeMap map, string name, string attrName) { if (parent != null && parent.Nodes != null) { foreach (FXmlNode node in parent.Nodes) { if (node.IsName(name)) { map.Set(node.Get(attrName), node); } } } }
//============================================================ // <T>在当前元素下,创建一个文档节点对象。</T> // // @param name 节点名称 // @return 节点对象 //============================================================ public virtual FXmlNode CreateNode(string name) { FXmlNode node = null; if (_document == null) { node = new FXmlNode(name); } else { node = _document.NodeFactory.CreateNode(name, null); } Elements.Push(node); return(node); }
//============================================================ // <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 info 转储信息 // @return 转储信息 //============================================================ public override FDump Dump(FDump info) { RDump.StartDump(info); FXmlNode parent = (FXmlNode)info.Instance; // 转存名称 info.Append(parent.Name); // 转存属性列表 if (parent.HasAttribute()) { info.Append(" ["); foreach (IPair <string, string> pair in parent.Attributes) { if (!pair.IsFirst()) { info.Append(", "); } info.Append(pair.Name, "=", pair.Value); } info.Append("]"); } // 转存内容 if (parent.HasText()) { info.Append("{"); info.Append(parent.Text); info.Append("}"); } // 转存元素列表 if (parent.HasElement()) { info.AppendLine(); foreach (FXmlElement element in parent.Elements) { info.IncreaseDeep(element); Dump(info); info.DecreaseDeep(); } } return(info); }
//============================================================ // <T>加载文档。</T> // // @param xdoc 文档对象 //============================================================ public void LoadDocument(XmlDocument xdoc) { _element.Clear(); RXml.SyncNodeFromElements(_element, xdoc.ChildNodes); _root = RXml.FindNode(_element.Elements); }