第二人生的源码分析(七十)LLXmlTreeParser类生成XML树
来源:互联网 发布:oracle 查询优化 编辑:程序博客网 时间:2024/05/10 00:35
LLXmlTreeParser类是继承类LLXmlParser,主要实现创建树节点,并且把树节点保存起来,这样就可以方便外面查找XML里的数据。下面先来分析这个类的声明:
#001 class LLXmlTreeParser : public LLXmlParser
#002 {
#003 public:
类的构造函数和析构函数。
#004 LLXmlTreeParser(LLXmlTree* tree);
#005 virtual ~LLXmlTreeParser();
#006
下面的函数实现分析XML配置文件。
#007 BOOL parseFile(const std::string &path, LLXmlTreeNode** root, BOOL keep_contents );
#008
#009 protected:
#010 const std::string& tabs();
#011
下面重载基类的虚函数,主要创建树节点和节点管理。
#012 // Overrides from LLXmlParser
#013 virtual void startElement(const char *name, const char **attributes);
#014 virtual void endElement(const char *name);
#015 virtual void characterData(const char *s, int len);
#016 virtual void processingInstruction(const char *target, const char *data);
#017 virtual void comment(const char *data);
#018 virtual void startCdataSection();
#019 virtual void endCdataSection();
#020 virtual void defaultData(const char *s, int len);
#021 virtual void unparsedEntityDecl(
#022 const char* entity_name,
#023 const char* base,
#024 const char* system_id,
#025 const char* public_id,
#026 const char* notation_name);
#027
下面函数创建一个LLXmlTreeNode节点。
#028 //template method pattern
#029 virtual LLXmlTreeNode* CreateXmlTreeNode(const std::string& name, LLXmlTreeNode* parent);
#030
#031 protected:
保存类LLXmlTree的指针。
#032 LLXmlTree* mTree;
保存XML开始的根节点。
#033 LLXmlTreeNode* mRoot;
保存当前节点。
#034 LLXmlTreeNode* mCurrent;
#035 BOOL mDump; // Dump parse tree to llinfos as it is read.
#036 BOOL mKeepContents;
#037 };
#038
下面再来详细地分析它的分析XML文件的函数,如下:
#001 BOOL LLXmlTreeParser::parseFile(const std::string &path, LLXmlTreeNode** root, BOOL keep_contents)
#002 {
#003 llassert( !mRoot );
#004 llassert( !mCurrent );
#005
保存是否保存内容。
#006 mKeepContents = keep_contents;
#007
调用基类parseFile函数分析XML数据。
#008 BOOL success = LLXmlParser::parseFile(path);
#009
#010 *root = mRoot;
#011 mRoot = NULL;
#012
#013 if( success )
#014 {
#015 llassert( !mCurrent );
#016 }
#017 mCurrent = NULL;
#018
#019 return success;
#020 }
通过函数startElement创建XML的数据节点,并保存到mCurrent节点里,其实是调用下面的函数添加到节点管理里:
#001 void LLXmlTreeNode::addAttribute(const std::string& name, const std::string& value)
#002 {
添加属性名称到属性管理表里。
#003 LLStdStringHandle canonical_name = LLXmlTree::sAttributeKeys.addString( name );
#004 const LLString *newstr = new LLString(value);
#005 mAttributes[canonical_name] = newstr; // insert + copy
#006 }
当需要读取这个XML节点数据时,是通过类LLXmlTreeNode的函数hasAttribute判断是否有这个属性,通过函数getAttributeS32等获取属性值。这样就完成了XML配置文件的分析,并获取到XML配置里的数据。
- 第二人生的源码分析(七十)LLXmlTreeParser类生成XML树
- 蔡军生先生第二人生的源码分析(七十)LLXmlTreeParser类生成XML树
- 第二人生的源码分析(六十九)使用LLXmlTree类来分析XML配置文件
- 蔡军生先生第二人生的源码分析(六十九)使用LLXmlTree类来分析XML配置文件
- 第二人生的源码分析(2)第二人生的基本功能
- 第二人生的源码分析(2)第二人生的基本功能
- 第二人生的源码分析(13)树显示的实现
- 第二人生的源码分析(5)类Log的实现
- 第二人生的源码分析(6)类CallSite的实现
- 第二人生的源码分析(5)类Log的实现
- 第二人生的源码分析(6)类CallSite的实现
- 第二人生的源码分析(六十八)LLXMLNode使用Expat库分析XML文件
- 蔡军生先生第二人生的源码分析(六十八)LLXMLNode使用Expat库分析XML文件
- 第二人生的源码分析(7)应用程序实例类
- 第二人生的源码分析(十六)保存人物角色的XML文件
- 蔡军生先生第二人生的源码分析(十六)保存人物角色的XML文件
- 第二人生的源码分析(六十五)Expat XML解析器的介绍
- 第二人生的源码分析(六十六)使用Expat XML解析器的例子
- 月度总结
- asp通过xmlhttp抓取网页内容不完整
- SimpleCollectionDemo.java
- 电驴协议中文版
- js获取控件位置
- 第二人生的源码分析(七十)LLXmlTreeParser类生成XML树
- 三星手机D908I安装java方法
- Linux下将可执行文件和so一起发布的技巧
- 不快乐
- 判断数字字母代码
- 图文并茂地教你如何安装RedHat Linux 9.0
- ubuntu -->root用户的设定
- String 和StringBuffer的区别
- C#中使用GDI+绘制辉光效果文字