博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CMarkup
阅读量:2177 次
发布时间:2019-05-01

本文共 3547 字,大约阅读时间需要 11 分钟。

         转自

 

         Cmarkup是依据EDOM的,这是这个简单XML分析的关键。EDOM是操作XML元素、属性和数据的简明方法集。当你不需要复杂的XML特性时,它避免你读大量的DOM和SAX文档。

          如果你希望使用微软的MSXML,CMarkup工程中CmarkupMSXML类全面的演示了通过EDOM来使用MSXML,并且它是以C++ COM语法开始。
          下面列出了CMarkup的特征:
                    独立:不需要任何外部的XML组件。
                    :编译到你的工程只是很小的一个类,并且对于文档只维持了一个字符串,以及一个总计小于字符串内存大小的索引数组。
                    快:分析器在相当快的建立索引数组。
                    简单:EDOM方法使创建、导航和修改XML无比的简单。
                    MSXML:CMarkupMSXML类用EDOM方法包装了微软的XML服务。MSXML编译选项用来演示这个类。
                    UNICODE(统一字符编码标准):对于WindowsNT和WindowsCE平台能够被编译成UNICODE,在WindowsNT UNICODE下,XML文档是流到UTF-8文件中,但是内部用宽字符。
                    UTF-8:对于UTF-8文件,这接受和返回UTF-8字符串(确保_MBCS没有被定义)
                    MBCS:对于双字节数据(定义_MBCS),它不与UTF-8兼容.
                    STL:CMarkupSTL类完全没有使用MFC,它的演示要使用STL编译选项。

 

          最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象之深,让我至今都无法忘怀。现在想在C++下发掘XML的强大,结果却发现建房子你除了需要基本的建设材料外,还需要些而外的工具。不像C#那样,已经打成包供你直接使用了。好在有知道CMarkup这个小型XML的分析器,可以为我所用。俗话说:磨刀不误砍柴工。我现在就来磨下刀。

         1、初始化
         Load 导入一个XML文件到CMarkup的对象中,并对它进行解析。类似C#的Load。
         SetDoc 从字符串中导入XML数据,并对它解析。类似C#的LoadXml。

         2、输出

         Save 将XML数据写入文件中。类似C#的Save。
         GetDoc 将整个XML数据文档作为字符串返回。

         3、改变当前位置

         FindElem 定位到下一个元素,可能和一个标签名或路径匹配。
         FindChildElem 定位到下一个子元素,匹配元素名或路径。
         FindPrevElem 定位前一个元素,可能和一个标签名或路径匹配。
         FindPrevChildElem 定位前一个子元素,可能匹配标签名。
         FindNode  定位下一个节点,可能和节点类型匹配。
         IntoElem  进入当前主位置的下一级,当前的位置变为父位置。
         OutOfElem 使当前父位置变成当前位置。
         ResetPos 复位当前位置为文档起始位置。
         ResetMainPos 将当前主位置复位为第一个兄弟位置之前。
         ResetChildPos 复位当前子位置到第一个子位置之前。

         4、文档新增
         AddElem 在当前主位置元素或最后兄弟位置之后增加一个元素。
         InsertElem 在当前主位置元素或第一个兄弟位置之前插入一个元素。
         AddChildElem 在当前子位置元素或最后一个子位置之后增加一个元素。
         InsertChileElem 在当前子位置元素或低一个子位置之前插入一个元素。
         AddSubDoc 在当前主位置元素或最后一个兄弟位置之后增加一个子文档。
         InsertSubDoc 在当前主位置元素或第一个兄弟位置之前插入一个子文档。
         AddChildSubDoc 在当前子位置元素或最后一个子位置之后增加子文档。
         InsertChildSubDoc 在当前子位置元素或第一个子位置之前插入一个子文档。
         AddNode 在当前节点之后或父元素内容末尾增加一个节点。
         InsertNode 在当前节点之前或父元素内容开头插入一个节点。

         5、文档中删除
         RemoveElem 删除当前包括子元素的主位置元素
         RemoveChildElem 删除包括当前子元素及其子元素
         RemoveNode 删除当前节点
         RemoveAttrib 删除当前位置元素具体的属性
         RemoveChildAttrib 删除当前子位置元素的某个具体属性

         6、得到值
         GetData 得到当前主位置元素或节点的字符串值
         GetChildData 得到当前子位置元素的字符串值
         GetElemContent 得到当前主位置元素包括其子元素的标记内容字符串值
         GetSubDoc 得到当前主位置元素包括其子元素的文档片断标记字符串值
         GetChildSubDoc 得到当前子位置元素包括其子元素的文档片断标记字符串值
         GetAttrib 得到主位置元素(或正在进行的指令的)某一具体属性字符串值
         GetChildAttrib 得到子位置某一特定属性的字符串值
         GetTagName 得到主位置元素(或正在进行的指令的)标签名称
         GetChildTagName 得到子位置元素的标签名称
         FindGetData 定位到匹配某一具体路径的下一个元素并返回字符串值

         7、设置值
         SetData 设置当前主位置元素或节点的值
         SetChildData 设置当前子位置元素的值
         SetElemContent 设置当前主位置元素的标记内容
         SetAttrib 设置当前主位置元素(或正在进行的指令的)某一具体属性的值
         SetChildAttrib 设置当前子位置元素某一具体属性的值
         FindSetData 定位匹配某一具体路径的下一个元素并设置其值

         8、获取其他信息
         GetAttribName 当过当前位置元素属性的具体索引得到属性名称
         GetNodeType 得到当前节点的节点类型
         GetElemLevel 得到当前主位置的级数
         GetElemFlags 得到当前主位置元素的标志
         SetElemFlags 设置当前主位置元素的标志
         GetOffsets 获得在当前主位置偏移的文档文本
         GetAttribOffsets 获得在当前主位置特定属性便宜的文档文本

         9、保存位置信息
         SavePos 在hash map中使用可选字符串名称保存当前位置
         RestorePos 定位到通过SavePos保存的位置
         SetMapSize 设置SavePos和RestorePos使用的hash map大小
         GetElemIndex 得到当前主位置元素整形索引值
         GotoElemIndex 设置当前主位置元素为给定的整形索引值
         GetChildElemIndex 得到当前子位置元素的整形索引值
         GotoChildElemIndex 设置当前子位置元素为给定的整形索引值
         GetParentElemIndex 获得当前父位置元素的整形索引值
         GotoParentElemIndex 设置当前父位置元素为给定的整形索引值
         GetElemPath 获得表示主位置元素绝对路径的字符串
         GetChildElemPath 获得表示子位置元素的绝对路径的字符串
         GetParentElemPath 获得表示父位置元素的绝对路径的字符串

         10、文档状态
         IsWellFormed 判定文档是否有单一根元素和恰当地包含元素
         GetError 从最后的解析中返回错误(信息)字符串
         GetDocFlags 返回文档标志
         SetDocFlags 设置文档标志
         GetDocElemCount 返回文档中元素的个数

         11、静态的实用函数
         ReadTextFile 读一个文本文件转成字符串
         WirteTextFile 写字符串到文本文件中
         GetDeclareEncoding 从XML声明中得到编码的名字
         EscapeText 返回标记中某一字符的编码
         UnescapeText 返回字符串值得某一特定字符解码
         UTF8ToA 将UTF-8字符转成非Unicode(如ANSI)字符
         AToUTF8 将非Unicode(如ANSI)字符转成UTF-8字符
         UTF16T08 将UTF-16字符转成UTF-8
         UTF8To16 将UTF-8字符转成UTF-16
         EncodeBase64 将二进制数据译成Base64字符串
         DecodeBase64 将Base64字符译成二进制数据

         自此,CMarkup的方法说明我已经翻译完成。有很多都是按照自己的理解或纯按字面意思翻译的。肯定还是理解不够准确地。后面的文章中,我会对每一个方法的代码进行一些简单分析,主要是给自己做技术积累用。欢迎大家指导!

转载地址:http://icfkb.baihongyu.com/

你可能感兴趣的文章
强化学习第3课:有些问题就像个赌局
查看>>
强化学习第4课:这些都可以抽象为一个决策过程
查看>>
强化学习第5课:什么是马尔科夫决策过程
查看>>
强化学习第6课:什么是 Crossentropy 方法
查看>>
强化学习第7课:交叉熵方法的一些局限性
查看>>
强化学习 8: approximate reinforcement learning
查看>>
图解什么是 Transformer
查看>>
代码实例:如何使用 TensorFlow 2.0 Preview
查看>>
6 种用 LSTM 做时间序列预测的模型结构 - Keras 实现
查看>>
走进JavaWeb技术世界1:JavaWeb的由来和基础知识
查看>>
走进JavaWeb技术世界2:JSP与Servlet的曾经与现在
查看>>
走进JavaWeb技术世界3:JDBC的进化与连接池技术
查看>>
走进JavaWeb技术世界4:Servlet 工作原理详解
查看>>
走进JavaWeb技术世界5:初探Tomcat的HTTP请求过程
查看>>
走进JavaWeb技术世界6:Tomcat5总体架构剖析
查看>>
走进JavaWeb技术世界7:Tomcat和其他WEB容器的区别
查看>>
走进JavaWeb技术世界9:Java日志系统的诞生与发展
查看>>
走进JavaWeb技术世界10:从JavaBean讲到Spring
查看>>
走进JavaWeb技术世界11:单元测试框架Junit
查看>>
走进JavaWeb技术世界12:从手动编译打包到项目构建工具Maven
查看>>