精华内容
下载资源
问答
  • CMarkup

    2011-03-18 10:15:00
    CMarkup xml; xml.Load("xxx.xml");//装载xml文件   xml.SetDoc(str);//将str作为xml文件进行解析     <br /><?xml version="1.0" encoding="utf-8"?><br /><root><br />...

    CMarkup xml;

    xml.Load("xxx.xml");//装载xml文件

     

    xml.SetDoc(str);//将str作为xml文件进行解析

     

     

    <?xml version="1.0" encoding="utf-8"?>

    <root>

    <Item>item</Item>     //xml.FindElem("root");  xml.IntoElem(); xml.FindElem("Item") xml.GetData();

    <Item>item1</Item> 

    <Item>item2</Item>

    <Item>item3</Item>

    <Item>item4</Item>

    </root>

     

     

    <?xml version="1.0" encoding="utf-8"?>

    <root>

    <Item name="QQ">item</Item>  //xml.FindElem("root");  xml.IntoElem();

                                                          //xml.FindElem("Item") xml.GetData(); 为item1

    <Item name="QQ1">item1</Item> //xml.GetAttrib("name") = QQ

    <Item name="QQ2">item2</Item>

    <Item name="QQ3">item3</Item>

    <item>item4</Item>

    </root>

    展开全文
  • CmarkUp文档

    2013-06-28 10:35:34
    CMarkUp详细说明文档,详细说明其各个接口
  • CMarkUp使用实例

    2016-04-01 11:17:53
    最近正在研究C++下的XML分析工具CMarkup。想在C++下发掘XML的强大,结果却发现建房子你除了需要基本的建设材料外,还需要些而外的工具。不像C#那样,已经打成包供你直接使用了。好在有知道CMarkup这个小型XML的分析...
  • CMarkup--使用 CMarkup库解析xml文件

    万次阅读 2016-10-25 13:05:15
    《windows客户端开发–使用tinyxml库解析xml文件》今天再介绍另一个强大的操作xml的库:CMarkup Simple C++ performance for text data and XML官网: http://www.firstobject.com/创建一个xml document:CMarkup ...

    之前介绍过tinyxml:
    windows客户端开发–使用tinyxml库解析xml文件

    今天再介绍另一个强大的操作xml的库:

    CMarkup
    Simple C++ performance for text data and XML

    官网:
    http://www.firstobject.com/

    创建一个xml document:

    CMarkup xml;
    xml.AddElem( "ORDER" );
    xml.IntoElem();
    xml.AddElem( "ITEM" );
    xml.IntoElem();
    xml.AddElem( "SN", "132487A-J" );
    xml.AddElem( "NAME", "crank casing" );
    xml.AddElem( "QTY", "1" );

    结果:

    <ORDER>
      <ITEM>
        <SN>132487A-J</SN>
        <NAME>crank casing</NAME>
        <QTY>1</QTY>
      </ITEM>
    </ORDER>

    保存:

    xml.Save( "C:\\Sample.xml" );

    作为字符串返回:

    MCD_STR strXML = xml.GetDoc();

    加载xml:

    xml.Load( "C:\\Sample.xml" );

    得到字符串:

    xml.SetDoc( strXML );

    浏览特定元素:

    xml.FindElem(); // root ORDER element
    xml.IntoElem(); // inside ORDER
    while ( xml.FindElem("ITEM") )
    {
        xml.IntoElem();
        xml.FindElem( "SN" );
        MCD_STR strSN = xml.GetData();
        xml.FindElem( "QTY" );
        int nQty = atoi( MCD_2PCSZ(xml.GetData()) );
        xml.OutOfElem();
    }

    增加元素和属性:

    CMarkup xml;
    xml.AddElem( "ORDER" );
    xml.IntoElem(); // inside ORDER
    for ( int nItem=0; nItem<aItems.GetSize(); ++nItem )
    {
        xml.AddElem( "ITEM" );
        xml.IntoElem(); // inside ITEM
        xml.AddElem( "SN", aItems[nItem].strSN );
        xml.AddElem( "NAME", aItems[nItem].strName );
        xml.AddElem( "QTY", aItems[nItem].nQty );
        xml.OutOfElem(); // back out to ITEM level
    }
    xml.AddElem( "SHIPMENT" );
    xml.IntoElem(); // inside SHIPMENT
    xml.AddElem( "POC" );
    xml.SetAttrib( "type", strPOCType );
    xml.IntoElem(); // inside POC
    xml.AddElem( "NAME", strPOCName );
    xml.AddElem( "TEL", strPOCTel );

    结果:

    <ORDER>
    <ITEM>
    <SN>132487A-J</SN>
    <NAME>crank casing</NAME>
    <QTY>1</QTY>
    </ITEM>
    <ITEM>
    <SN>4238764-A</SN>
    <NAME>bearing</NAME>
    <QTY>15</QTY>
    </ITEM>
    <SHIPMENT>
    <POC type="non-emergency">
    <NAME>John Smith</NAME>
    <TEL>555-1234</TEL>
    </POC>
    </SHIPMENT>
    </ORDER>

    查找元素:

    {
        xml.IntoElem();
        xml.FindElem( "SN" );
        MCD_STR strSN = xml.GetData();
        xml.ResetMainPos();
        xml.FindElem( "QTY" );
        int nQty = atoi( MCD_2PCSZ(xml.GetData()) );
        xml.OutOfElem();
    }
    xml.ResetPos(); // top of document
    xml.FindElem(); // ORDER element is root
    xml.IntoElem(); // inside ORDER
    while ( xml.FindElem("ITEM") )
    {
        xml.FindChildElem( "SN" );
        if ( xml.GetChildData() == strFindSN )
            break; // found
    }

    CMarkup与tinyxml对比
    参考:
    http://blog.csdn.net/suxinpingtao51/article/details/34424539

    在使用tinyxml时,可能会new好多对象,但tinyxml的每个对象,在被释放析构时,会将它下面的所有节点都释放点,如TiXmlDocument 文档对象,我们只需要delete doc即可,若是你还delete pElemRoot; delete pElemData,则在运行时会被二次释放报错。

    尽量不要在xml中使用中文
    TinyXml只认识UTF-8和ISO 8859-1编码, 而不知GB2312为何物, 但事实上你以GB2312在文档中写入中文, 之后可以正确读取, 而且文档在记事本中打开也能显示正确的中文, 其实这是种巧合, 并不是TinyXml支持GB2312了.

    展开全文
  • CMarkup 函数

    2020-02-19 02:40:32
    Load 导入一个XML文件到CMarkup的对象中,并对它进行解析。 SetDoc 从字符串中导入XML数据,并对它解析。 2、输出 Save 将XML数据写入文件中。 GetDoc 将整个XML数据文档作为字符串返回。 3、改变当前位置 ...

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

    2、输出
    Save 将XML数据写入文件中。
    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字符译成二进制数据


    1、CMarkUp可以解析非.xml结尾的文件,只要解析的格式和文件格式一致!

    2、CMarkUp可以不添加<?xml version=\"1.0\" encoding=\"UTF-8\"?>

    展开全文
  • CMarkup class methods2.rar

    2019-07-28 14:52:15
    CMarkup的官方使用说明下载打包好文件。方便放到本地磁盘中查阅使用。需要的朋友参考下。 VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。 所以就用CMarkup来解析,使用过后,觉得非常不错,...
  • 使用CMarkup

    2011-07-05 17:42:28
    CMarkup类、及CMarkup类的简单使用方法
  • CMarkUp学习

    2014-11-10 21:22:42
    对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。.在这个位置,如果你调用 AddElem("ORDER") ,你的文档会简单的装一个空ORDER元素. 然后调用AddChildElem 在根元素的下面创建元素 (例如...

    创建一个XML文档

    对于创建一个XML文档,需要实例化一个CMarkup对象,并调用AddElem创建根元素。.在这个位置,如果你调用 AddElem("ORDER") ,你的文档会简单的装一个空ORDER元素<ORDER/>. 然后调用AddChildElem 在根元素的下面创建元素 (例如:“进入”根元素内部,层次表示).下面的示例代码创建一个XML文档并返回它(的内容)到一个字符串中。

    CMarkup xml;

    xml.AddElem("ORDER" );

    xml.AddChildElem("ITEM" );

    xml.IntoElem();

    xml.AddChildElem("SN", "132487A-J");

    xml.AddChildElem("NAME", "crank casing" );

    xml.AddChildElem("QTY", "1" );

    CString csXML =xml.GetDoc();

    这些代码产生了下面的XML,这个根结点是ORDER元素;注意它的开始标签<ORDER> 在开头,结束标签</ORDER>在结尾。当一个元素是在一个父下面(深入或被包含),这个父元素的开始标签要在它之前,结束标签要在它之后。ORDER元素包含一个ITEM元素,而ITEM元素包含了三个字子元素:SN、NAME和QTY;

    <ORDER>

    <ITEM>

    <SN>132487A-J</SN>

    <NAME>crankcasing</NAME>

    <QTY>1</QTY>

    </ITEM>

    </ORDER>

    如例子中所显示的,你也能够在一个子元素下创建新元素,这需要调用IntoElem 移动你的当前主位置到当前子元素位置,然后你就可以在这下面增加一个子元素了。CMarkup在索引中保持了一个当前位置指针,以保证你的源码更加短和更简单,当导航文件时,相同的逻辑位置也会被使用。

     

    导航XML文档

    上面的例子所创建的XML字符串,用SetDoc方法加入到CMarkup对象中能够被解析,你也可以引导它正确的进入被创建的同一个CMarkup对象中,如果你要设置当前位置到文档的开始时,需要调用ResetPos.

    在下面的例子中,从csXML字符串生成CMarkup对象后,我们循环ORDER元素下的所有ITEM元素,并得到每个项目的序号和数量。

    CMarkup xml;

    xml.SetDoc( csXML );

    while (xml.FindChildElem("ITEM") )

    {

       xml.IntoElem();

       xml.FindChildElem( "SN" );

       CString csSN = xml.GetChildData();

       xml.FindChildElem( "QTY" );

        intnQty = atoi( xml.GetChildData() );

       xml.OutOfElem();

    }

    对于我们发现的每个元素,在查询它了子元素之前要调用IntoElem,查询完之后再调用OutOfElem ,当你习惯于这种导航类型时,你将知道,检查你的循环时,要确定每个IntoElem 调用都有一个与之对应的OutOfElem 调用 。

    增加元素和属性

    上面创建文档的例子中仅创建了一个ITEM元素,现在这个例子是创建多个项目,从前一个内容加裁后,再增加数据源,加上SHIPMENT信息元素中有一个属性,这段代码也演示了你能调用调用IntoElem和AddElem来代替AddChildElem,函数调用。虽然这意味着更多的调用,但许多人认为这样更直观。

    CMarkup xml;

    xml.AddElem("ORDER" );

    xml.IntoElem(); //inside ORDER

    for ( int nItem=0;nItem<aItems.GetSize(); ++nItem )

    {

       xml.AddElem( "ITEM" );

       xml.IntoElem(); // inside ITEM

       xml.AddElem( "SN", aItems[nItem].csSN );

       xml.AddElem( "NAME", aItems[nItem].csName );

       xml.AddElem( "QTY", aItems[nItem].nQty );

       xml.OutOfElem(); // back out to ITEM level

    }

    xml.AddElem("SHIPMENT" );

    xml.IntoElem(); //inside SHIPMENT

    xml.AddElem("POC" );

    xml.SetAttrib( "type",csPOCType );

    xml.IntoElem(); //inside POC

    xml.AddElem("NAME", csPOCName );

    xml.AddElem("TEL", csPOCTel );

    这段代码产生了下面的XML,根元素ORDER包含两个ITEM元素和一个SHIPMENT元素,ITEM元素全都包含SN、NAME、和QTY元素,SHIPMENT元素包含一个带有属性类型的POC元素,和NAME及TEL子元素。

    <ORDER>

    <ITEM>

    <SN>132487A-J</SN>

    <NAME>crankcasing</NAME>

    <QTY>1</QTY>

    </ITEM>

    <ITEM>

    <SN>4238764-A</SN>

    <NAME>bearing</NAME>

    <QTY>15</QTY>

    </ITEM>

    <SHIPMENT>

    <POC type="non-emergency">

    <NAME>JohnSmith</NAME>

    <TEL>555-1234</TEL>

    </POC>

    </SHIPMENT>

    </ORDER>

     

    查找元素

    FindElem 和 FindChildElem方法用于到下一个兄弟元素。如果可选的标签名被指定,那么它们将到下一个与标签名相匹配的元素,被发现的元素是当前元素,并且下次调用Find将会到当前位置后的下一个兄弟或下一个匹配兄弟。

    当你无法判断元素的索引时,在调用两个Find方法之间,一定要复位当前位置。看上面的例子中ITEM元素,如果是别的人创建的XML文件,你不能确定SN元素在QTY元素之前,那么在查找QTY元素之前就要调用ResetChildPos();

    对于用一个特定的序号去查找元素,你需要完全循环ITEM元素,并比较SN元素的数据和你正在搜索的序号。这个例子不同于先前导航的例子,它调用IntoElem 进入到ORDER元素,并且用FindElem("ITEM")替换FindChildElem("ITEM");其实两种方式都挺好。需要注意的是,在Find方法中指定ITEM元素的标签名,我们会忽略所有其它的兄弟元素,例如SHIPMENT元素。

    CMarkup xml;

    xml.SetDoc( csXML );

    xml.FindElem(); //ORDER element is root

    xml.IntoElem(); //inside ORDER

    while (xml.FindElem("ITEM") )

    {

       xml.FindChildElem( "SN" );

        if (xml.GetChildData() == csFindSN )

           break; // found

    }

     

    编码

    ASCII编码引用了我们所依靠的字符码128以下的字符,如用英语编程。如果你只使用ASCII码,很方便,UTF-8编程与你拉公共ASCII集相同。

    如果你所使用的字符集不在Unicode编码集(UTF-8,UTF-16,UCS-2)中,那么出于交互性以及在IE中很好的显示,你真的需要在XML声明中进行描述。像ISO-8859-1(西欧)字符集指定字符值在一个比特且在128到255之间。以便每个字符仍然使用一个比特。Windows双字节字符集像GB2312,Shift_JIS和EUC-KR,每个字符都是用一个或两个字节,对于这些Windows字符集,在你的预处理中需要定义_MBCS ,并要确定用户的操作系统设置到合适的编码页。

    关于用一个XML描述的XML文档前缀,像<?xml version="1.0"encoding="ISO-8859-1"?>,需要通过用SetDoc或Cmarkup的构造函数来传递。在结尾要包括回车符,这样根结点会显示在下一行。

    xml.SetDoc("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n");

    xml.AddElem("island", "Curaçao" );

    展开全文
  • XML解析 CMarkup类 c++

    热门讨论 2013-10-24 17:02:32
    c++ CMarkup解析xml 感觉还不错 分享CMarkup
  • CMarkup解析xml

    2012-01-17 22:53:22
    Cmarkup 是基于“压缩”文档对象模型(EDOM : "Encapsulated" Document Object Model,),这是这个简单XML处理器的关键。它的一套XML处理方法和产生的效果与DOM(Document Object Model)是一样的。但是整个DOM有无数的...
  • CMarkup类核心资料

    2010-09-09 10:02:45
    CMarkup类核心资料CMarkup类核心资料CMarkup类核心资料CMarkup类核心资料CMarkup类核心资料CMarkup类核心资料CMarkup类核心资料CMarkup类核心资料
  • CMarkUp使用简介

    2020-09-13 13:14:25
    最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印 象之深,让我至今都无法忘怀。现在想在C++下发掘XML的强大,结果却发现建房子你除了需要基本的建设材料...
  • Cmarkup类....

    热门讨论 2014-05-04 15:34:37
    c++ 解析xml cmarkup
  • 本压缩包为CMarkup工具包的头文件和源文件,在mfc项目中调用Markup.h头文件即可直接调用CMarkup提供的类进行对xml操作。
  • cmarkup 解析 xml

    2011-07-13 10:34:46
    VC解析XML--使用CMarkup类解析XML (一) 先讲一下XML中的物殊字符,手动填写时注意一下。 字符 字符实体 & &或&#38; ' '或' > >或> ;或&< " "或" (二) CMarkup类的源...
  • CMarkUp介绍

    2013-12-31 11:16:08
    最近准备写一些xml解析的小程序,开始使用了tinyxml,不过tinyxml不支持Unicode,比较麻烦,后来又使用了CMarkup,找到CMarkup的一些文档,随口阅读的过程翻译之,记如下(P.S. 真正NB的程序员是不是应该自己写个XML...
  • CMarkUp使用保存与读取

    2015-05-18 14:02:57
    CMarkUp的使用保存与打开 并在CListControl中显示数据
  • cmarkup是把整个xml文件作为字符串载入内存,再利用字符串类提供的函数进行访问,MFC环境下是利用CString,若不使用MFC,则需要增加编译预定义#define MARKUP_STL以使cmarkup 使用stl的string类  创建xml 第一步:...
  • CMarkup类简介

    2014-11-23 14:59:48
    CMarkup类简介 Initialization Load: Populates the CMarkup objectfrom a file and parses it. SetDoc: Populates the CMarkup objectfrom a string and parses it. Output Save: Writes the document to file...
  • 本篇文章是对VC解析XML文件-CMarkup的使用进行了详细的分析介绍,需要的朋友参考下
  • CMarkup dll工程以及调用 CMarkup dll工程以及调用 CMarkup dll工程以及调用
  • c++ XML解析 CMarkup示例

    热门讨论 2013-10-24 16:44:50
    c++ CMarkup 解析 XML 个人感觉还不错 分享demo
  • vc中操作Xml-使用CMarkup.pdf
  • CMarkup成员函数的说明

    2012-09-23 19:17:22
    CMarkup成员函数的说明
  • CMarkup XML操作类

    2011-12-05 19:30:20
    CMarkup很好用的CML操作类,包含一个测试例子
  • CMarkup所有方法说明

    2011-12-21 16:23:33
    CMarkup所有方法说明 各个函数的作用等 希望能够帮助你!!!
  • 对于上次的CMarkUp使用的更新!功能更多!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,723
精华内容 689
关键字:

cmarkup