码迷,mamicode.com
首页 > 其他好文 > 详细

Duilib源码分析(三)XML解析器—CMarkup

时间:2015-10-31 12:59:14      阅读:355      评论:0      收藏:0      [点我收藏+]

标签:

  上一节介绍了控件构造器CDialogBuilder,接下来将分析其XML解析器CMarkup;

  CMarkup:xml解析器,目前内置支持三种编码格式:UTF8、UNICODE、ASNI;CMarkupNode:xml节点类

  先介绍CMarkup:

  XMLELEMENT: xml节点元素类型定义,iStart,节点元素在xml文件中的起始位置;iChild,节点元素子节点;iNext,节点元素的下一个节点(兄弟节点);iParent,节点元素的父节点;iData,

  节点元素的数据。

  CMarkupNode作为CMarkup的友元类,意味着可以访问CMarkup的各成员函数和数据属性,事实上后期的遍历xml就是结合CMarkupNode的GetSibling和GetChild实现的。

  类成员数据:

    m_pstrXML:为CMarkup存储的以加载xml文件数据内容的指针缓冲区;

    m_pElements:保存XMLELEMENT类型的节点元素信息的缓冲区,事实上可能有部分未预料的存储空间;

    m_nElements:实际的保存m_pElements中有效的节点元素数;

    m_nReservedElements:预留的m_pElements缓冲区空间大小,具体策略为:m_nElements >= m_nReservedElements ) {m_nReservedElements += (m_nReservedElements / 2)

                 + 500;m_pElements = static_cast<XMLELEMENT*>(realloc(m_pElements, m_nReservedElements * sizeof(XMLELEMENT)));

    m_szErrorMsg:最近一次解析时的错误信息;

    m_szErrorXML:最近一次解析时的xml位置信息;

    m_bPreserveWhitespace:是否跳过忽略空格,默认是忽略;

    

  CMarkupNode:

  XMLATTRIBUTE:节点属性结构体定义,iName为属性名,iValue为属性值均为ULONG类型;

  MAX_XML_ATTRIBUTES:节点支持最多64个属性个数;

  类成员数据:

    m_aAttributes:节点属性列表(节点属性数组,保存数据类似于键值对的方式);

    m_iPos:指定该属性节点在所属拥有者(指CMarkup对象)中的节点元素中的当前位置(事实上其节点元素也为指针数组保存);

    m_nAttributes:节点中属性数;

    m_pOwner:该节点所属拥有者(指CMarkup对象);

  

Duilib源码分析(三)XML解析器—CMarkup

标签:

原文地址:http://www.cnblogs.com/haomiao/p/4925273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!