XML解析类CMarkup的使用方法

前端之家收集整理的这篇文章主要介绍了XML解析类CMarkup的使用方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

VC解析XML文件的工具有很多,CMarkup, tinyXML,还有IBM的,MS的等等。
据说tinyXML很好,可能字符集问题,我编译不了。
所以就用CMarkup来解析,使用过后,觉得非常不错,使用起来很方便。
CMarkup下载地址:http://www.firstobject.com/
发现网上有方法很法,我就摘下来了

    @H_404_14@//----------UserInfo.xml--------------
  1. xmlversion="1.0"encoding="UTF-8"?>
  2. @H_404_14@<UserInfo>
  3. <UserID>luo</UserID>
  4. @H_404_14@<UserID>lin</UserID>
  5. </UserInfo>
  6. @H_404_14@//----------UserInfo.xml--------------
  7. xmlversion="1.0"encoding="UTF-8"?>
  8. @H_404_14@<UserInfo>
  9. <UserID>luo</UserID>
  10. @H_404_14@<UserID>lin</UserID>
  11. </UserInfo>


1. 生成UserInfo.xml

    @H_404_14@CMarkupxml;
  1. xml.SetDoc("xmlversion=/"1.0/"encoding=/"UTF-8/"?>/r/n");
  2. @H_404_14@xml.AddElem("UserInfo");
  3. xml.IntoElem();
  4. @H_404_14@xml.AddElem("UserID","luo");
  5. xml.AddElem("UserID","lin");
  6. @H_404_14@xml.OutOfElem();
  7. xml.Save("UserInfo.xml");
  8. @H_404_14@CMarkupxml;
  9. xml.SetDoc("xmlversion=/"1.0/"encoding=/"UTF-8/"?>/r/n");
  10. @H_404_14@xml.AddElem("UserInfo");
  11. xml.IntoElem();
  12. @H_404_14@xml.AddElem("UserID","lin"); @H_404_14@xml.OutOfElem();
  13. xml.Save("UserInfo.xml");


2. 浏览特定元素

    @H_404_14@CMarkupxml;
  1. xml.Load("UserInfo.xml");
  2. @H_404_14@BOOLbFind=true;
  3. xml.ResetMainPos();
  4. @H_404_14@while(xml.FindChildElem("UserID");)
  5. {
  6. @H_404_14@@H_732_404@//此时接点还是父接点
  7. CStringstrTagName=_T("");
  8. @H_404_14@CStringstrData=_T("");
  9. strTagName=xml.GetChildTagName();
  10. @H_404_14@strData=xml.GetChildData();
  11. TRACE("/n---tagName:%s,Data:%s--/n",strTagName,strData);
  12. @H_404_14@}
  13. @H_732_404@/********************这样也可以******************
  14. @H_404_14@@H_732_404@CMarkupxml;
  15. @H_732_404@xml.Load("UserInfo.xml");
  16. @H_404_14@@H_732_404@BOOLbFind=true;
  17. @H_732_404@xml.ResetMainPos();
  18. @H_404_14@@H_732_404@
  19. @H_732_404@while(xml.FindChildElem("UserID");)
  20. @H_404_14@@H_732_404@{
  21. @H_732_404@xml.IntoElem();
  22. @H_404_14@@H_732_404@CStringstrTagName=_T("");
  23. @H_732_404@CStringstrData=_T("");
  24. @H_404_14@@H_732_404@strTagName=xml.GetTagName();
  25. @H_732_404@strData=xml.GetData();
  26. @H_404_14@@H_732_404@TRACE("/n---tagName:%s,Data:%s--/n",strData);
  27. @H_732_404@xml.OutOfElem();
  28. @H_404_14@@H_732_404@}*/
  29. @H_732_404@/**************这样也可以**********************
  30. @H_404_14@@H_732_404@CMarkupxml;
  31. @H_732_404@xml.Load("UserInfo.xml");
  32. @H_404_14@@H_732_404@BOOLbFind=true;
  33. @H_732_404@xml.ResetMainPos();
  34. @H_404_14@@H_732_404@xml.FindElem();//UserInfo
  35. @H_732_404@xml.IntoElem();
  36. @H_404_14@@H_732_404@while(xml.FindElem("UserID");)
  37. @H_732_404@{
  38. @H_404_14@@H_732_404@CStringstrTagName=_T("");
  39. @H_732_404@CStringstrData=_T("");
  40. @H_404_14@@H_732_404@strTagName=xml.GetTagName();
  41. @H_732_404@strData=xml.GetData();
  42. @H_404_14@@H_732_404@TRACE("/n---tagName:%s,strData);
  43. @H_732_404@}
  44. @H_404_14@@H_732_404@*/


//-------------结果----------
---tagName:UserID,Data:luo--
---tagName:UserID,Data:lin—

    @H_404_14@CMarkupxml;
  1. xml.Load("UserInfo.xml");
  2. @H_404_14@BOOLbFind=true;
  3. xml.ResetMainPos();
  4. @H_404_14@while(xml.FindChildElem("UserID");)
  5. {
  6. @H_404_14@@H_732_404@//此时接点还是父接点
  7. CStringstrTagName=_T("");
  8. @H_404_14@CStringstrData=_T("");
  9. strTagName=xml.GetChildTagName();
  10. @H_404_14@strData=xml.GetChildData();
  11. TRACE("/n---tagName:%s,Data:lin—

    3. 修改

    //--------把UserID为”luo”改为”flypigluo”-----------

      @H_404_14@BOOLbLoadXml=false;
    1. CMarkupxml;
    2. @H_404_14@bLoadXml=xml.Load("UserInfo.xml");
    3. if(bLoadXml)
    4. @H_404_14@{
    5. CStringstrUserID=_T("");
    6. @H_404_14@xml.ResetMainPos();
    7. xml.FindElem();
    8. @H_404_14@xml.IntoElem();
    9. while(xml.FindElem("UserID"))
    10. @H_404_14@{
    11. strUserID=xml.GetData();
    12. @H_404_14@if(strUserID=="luo")
    13. {
    14. @H_404_14@xml.SetData(CString("flypig")+strUserID);
    15. xml.Save("UserInfo.xml");
    16. @H_404_14@break;
    17. }
    18. @H_404_14@}
    19. }
    20. @H_404_14@@H_732_404@//--------把UserID为”luo”改为”flypigluo”-----------
    21. BOOLbLoadXml=false;
    22. @H_404_14@CMarkupxml;
    23. bLoadXml=xml.Load("UserInfo.xml");
    24. @H_404_14@if(bLoadXml)
    25. {
    26. @H_404_14@CStringstrUserID=_T("");
    27. xml.ResetMainPos();
    28. @H_404_14@xml.FindElem();
    29. xml.IntoElem();
    30. @H_404_14@while(xml.FindElem("UserID"))
    31. {
    32. @H_404_14@strUserID=xml.GetData();
    33. if(strUserID=="luo")
    34. @H_404_14@{
    35. xml.SetData(CString("flypig")+strUserID);
    36. @H_404_14@xml.Save("UserInfo.xml");
    37. break;
    38. @H_404_14@}
    39. }
    40. @H_404_14@}


    4. 添加

    4.1 添在最后面(使用的是AddElem)

    //加在最后面

      @H_404_14@BOOLbLoadXml=false;
    1. CMarkupxml;
    2. @H_404_14@bLoadXml=xml.Load("UserInfo.xml");
    3. if(bLoadXml)
    4. @H_404_14@{
    5. xml.ResetMainPos();
    6. @H_404_14@xml.FindElem();
    7. xml.IntoElem();
    8. @H_404_14@xml.AddElem("UserID","luoluo");
    9. xml.OutOfElem();
    10. @H_404_14@xml.Save("UserInfo.xml");
    11. }
    12. @H_404_14@@H_732_404@//--------原来为------
    13. xmlversion="1.0"encoding="UTF-8"?>
    14. @H_404_14@<UserInfo>
    15. <UserID>luo</UserID>
    16. @H_404_14@<UserID>lin</UserID>
    17. </UserInfo>
    18. @H_404_14@@H_732_404@//---------添加后为-------------
    19. xmlversion="1.0"encoding="UTF-8"?>
    20. @H_404_14@<UserInfo>
    21. <UserID>luo</UserID>
    22. @H_404_14@<UserID>lin</UserID>
    23. <UserID>luoluo</UserID>
    24. @H_404_14@</UserInfo>


    4.2 加在最前面(使用InsertElem)

      @H_404_14@BOOLbLoadXml=false;
    1. CMarkupxml;
    2. @H_404_14@bLoadXml=xml.Load("UserInfo.xml");
    3. if(bLoadXml)
    4. @H_404_14@{
    5. xml.ResetMainPos();
    6. @H_404_14@xml.FindElem();
    7. xml.IntoElem();
    8. @H_404_14@xml.InsertElem("UserID","AddUserIDHead");
    9. xml.OutOfElem();
    10. @H_404_14@xml.Save("UserInfo.xml");
    11. }
    12. @H_404_14@@H_732_404@//----原来为—
    13. xmlversion="1.0"encoding="UTF-8"?>
    14. @H_404_14@<UserInfo>
    15. <UserID>luo</UserID>
    16. @H_404_14@<UserID>lin</UserID>
    17. </UserInfo>
    18. @H_404_14@@H_732_404@//------修改后-----
    19. xmlversion="1.0"encoding="UTF-8"?>
    20. @H_404_14@<UserInfo>
    21. <UserID>AddUserIDHead</UserID>
    22. @H_404_14@<UserID>luo</UserID>
    23. <UserID>lin</UserID>
    24. @H_404_14@</UserInfo>
    25. BOOLbLoadXml=false;
    26. @H_404_14@CMarkupxml;
    27. bLoadXml=xml.Load("UserInfo.xml");
    28. @H_404_14@if(bLoadXml)
    29. {
    30. @H_404_14@xml.ResetMainPos();
    31. xml.FindElem();
    32. @H_404_14@xml.IntoElem();
    33. xml.InsertElem("UserID","AddUserIDHead");
    34. @H_404_14@xml.OutOfElem();
    35. xml.Save("UserInfo.xml");
    36. @H_404_14@}
    37. @H_732_404@//----原来为—
    38. @H_404_14@xmlversion="1.0"encoding="UTF-8"?>
    39. <UserInfo>
    40. @H_404_14@<UserID>luo</UserID>
    41. <UserID>lin</UserID>
    42. @H_404_14@</UserInfo>
    43. @H_732_404@//------修改后-----
    44. @H_404_14@xmlversion="1.0"encoding="UTF-8"?>
    45. <UserInfo>
    46. @H_404_14@<UserID>AddUserIDHead</UserID>
    47. <UserID>luo</UserID>
    48. @H_404_14@<UserID>lin</UserID>
    49. </UserInfo>


    5. 删除

      @H_404_14@CMarkupxml;
    1. xml.Load("UserInfo.xml");
    2. @H_404_14@BOOLbFind=true;
    3. xml.ResetMainPos();
    4. @H_404_14@while(bFind)
    5. {
    6. @H_404_14@bFind=xml.FindChildElem("UserID");
    7. if(bFind)
    8. @H_404_14@{
    9. @H_732_404@//此时接点还是父接点
    10. @H_404_14@CStringstrData=_T("");
    11. strData=xml.GetChildData();
    12. @H_404_14@if(strData=="luo")
    13. {
    14. @H_404_14@xml.RemoveChildElem();
    15. xml.Save("UserInfo.xml");
    16. @H_404_14@break;
    17. }
    18. @H_404_14@}
    19. }
    20. @H_404_14@CMarkupxml;
    21. xml.Load("UserInfo.xml");
    22. @H_404_14@BOOLbFind=true;
    23. xml.ResetMainPos();
    24. @H_404_14@while(bFind)
    25. {
    26. @H_404_14@bFind=xml.FindChildElem("UserID");
    27. if(bFind)
    28. @H_404_14@{
    29. @H_732_404@//此时接点还是父接点
    30. @H_404_14@CStringstrData=_T("");
    31. strData=xml.GetChildData();
    32. @H_404_14@if(strData=="luo")
    33. {
    34. @H_404_14@xml.RemoveChildElem();
    35. xml.Save("UserInfo.xml");
    36. @H_404_14@break;
    37. }
    38. @H_404_14@}
    39. }


    6. 查找
    见第二点浏览。类似上面的例子里面没有属性这些东西,下面的一个例子是有属性

      @H_404_14@@H_732_404@//UserInfo1.xml
    1. xmlversion="1.0"encoding="UTF-8"?>
    2. @H_404_14@<UserInfo>
    3. <UserUserID="UserID00"UserPwd="UserPwd00"UserLevel="158"/>
    4. @H_404_14@<UserUserID="UserID01"UserPwd="UserPwd01"UserLevel="162"/>
    5. <UserUserID="UserID02"UserPwd="UserPwd02"UserLevel="165"/>
    6. @H_404_14@<UserUserID="UserID03"UserPwd="UserPwd03"UserLevel="168"/>
    7. <UserUserID="UserID04"UserPwd="UserPwd04"UserLevel="171"/>
    8. @H_404_14@<UserUserID="UserID05"UserPwd="UserPwd05"UserLevel="175"/>
    9. <UserUserID="UserID06"UserPwd="UserPwd06"UserLevel="178"/>
    10. @H_404_14@<UserUserID="UserID07"UserPwd="UserPwd07"UserLevel="181"/>
    11. <UserUserID="UserID08"UserPwd="UserPwd08"UserLevel="184"/>
    12. @H_404_14@<UserUserID="UserID09"UserPwd="UserPwd09"UserLevel="188"/>
    13. </UserInfo>
    14. @H_404_14@@H_732_404@//UserInfo1.xml
    15. xmlversion="1.0"encoding="UTF-8"?>
    16. @H_404_14@<UserInfo>
    17. <UserUserID="UserID00"UserPwd="UserPwd00"UserLevel="158"/>
    18. @H_404_14@<UserUserID="UserID01"UserPwd="UserPwd01"UserLevel="162"/>
    19. <UserUserID="UserID02"UserPwd="UserPwd02"UserLevel="165"/>
    20. @H_404_14@<UserUserID="UserID03"UserPwd="UserPwd03"UserLevel="168"/>
    21. <UserUserID="UserID04"UserPwd="UserPwd04"UserLevel="171"/>
    22. @H_404_14@<UserUserID="UserID05"UserPwd="UserPwd05"UserLevel="175"/>
    23. <UserUserID="UserID06"UserPwd="UserPwd06"UserLevel="178"/>
    24. @H_404_14@<UserUserID="UserID07"UserPwd="UserPwd07"UserLevel="181"/>
    25. <UserUserID="UserID08"UserPwd="UserPwd08"UserLevel="184"/>
    26. @H_404_14@<UserUserID="UserID09"UserPwd="UserPwd09"UserLevel="188"/>
    27. </UserInfo>


    7. 产生

      @H_404_14@CStringstrID=_T("");
    1. CStringstrPwd=_T("");
    2. @H_404_14@CMarkupxml;
    3. xml.SetDoc("xmlversion=/"1.0/"encoding=/"UTF-8/"?>");
    4. @H_404_14@xml.AddElem("UserInfo");
    5. xml.IntoElem();
    6. @H_404_14@for(inti=0;i<10;i++)
    7. {
    8. @H_404_14@@H_732_404@//产生一个随机数,作为权限
    9. srand(UINT(time(NULL)+i));
    10. @H_404_14@intnLevel=rand()%256;
    11. strID.Format("UserID%02d",i);
    12. @H_404_14@strPwd.Format("UserPwd%02d",i);
    13. xml.AddElem("User");
    14. @H_404_14@xml.AddAttrib("UserID",strID);
    15. xml.AddAttrib("UserPwd",strPwd);
    16. @H_404_14@xml.AddAttrib("UserLevel",nLevel);
    17. }
    18. @H_404_14@xml.OutOfElem();
    19. xml.Save("UserInfo1.xml");
    20. @H_404_14@CStringstrID=_T("");
    21. CStringstrPwd=_T("");
    22. @H_404_14@CMarkupxml;
    23. xml.SetDoc("xmlversion=/"1.0/"encoding=/"UTF-8/"?>");
    24. @H_404_14@xml.AddElem("UserInfo");
    25. xml.IntoElem();
    26. @H_404_14@for(inti=0;i<10;i++)
    27. {
    28. @H_404_14@@H_732_404@//产生一个随机数,作为权限
    29. srand(UINT(time(NULL)+i));
    30. @H_404_14@intnLevel=rand()%256;
    31. strID.Format("UserID%02d",nLevel);
    32. }
    33. @H_404_14@xml.OutOfElem();
    34. xml.Save("UserInfo1.xml");


    8. 查找

      @H_404_14@CMarkupxml;
    1. BOOLbLoad=false;
    2. @H_404_14@BOOLbFind=false;
    3. bLoad=xml.Load("UserInfo1.xml");
    4. @H_404_14@if(bLoad)
    5. {
    6. @H_404_14@CStringstrID;
    7. CStringstrPwd;
    8. @H_404_14@xml.ResetMainPos();
    9. xml.FindElem();@H_732_404@//UserInfo
    10. @H_404_14@while(xml.FindChildElem("User"))
    11. {
    12. @H_404_14@strID=xml.GetChildAttrib("UserID");
    13. strPwd=xml.GetChildAttrib("UserPwd");
    14. @H_404_14@TRACE("/n----id:%s,pwd:%s-------/n",strID,strPwd);
    15. if(strID=="UserID00"&&strPwd=="UserPwd00")
    16. @H_404_14@{
    17. bFind=true;
    18. @H_404_14@break;
    19. }
    20. @H_404_14@}
    21. }
    22. @H_404_14@if(bFind)
    23. {
    24. @H_404_14@TRACE("/n----find------/n");
    25. }
    26. @H_404_14@else
    27. {
    28. @H_404_14@TRACE("/n----nofind------/n");
    29. }
    30. @H_404_14@CMarkupxml;
    31. BOOLbLoad=false;
    32. @H_404_14@BOOLbFind=false;
    33. bLoad=xml.Load("UserInfo1.xml");
    34. @H_404_14@if(bLoad)
    35. {
    36. @H_404_14@CStringstrID;
    37. CStringstrPwd;
    38. @H_404_14@xml.ResetMainPos();
    39. xml.FindElem();@H_732_404@//UserInfo
    40. @H_404_14@while(xml.FindChildElem("User"))
    41. {
    42. @H_404_14@strID=xml.GetChildAttrib("UserID");
    43. strPwd=xml.GetChildAttrib("UserPwd");
    44. @H_404_14@TRACE("/n----id:%s,strPwd);
    45. if(strID=="UserID00"&&strPwd=="UserPwd00")
    46. @H_404_14@{
    47. bFind=true;
    48. @H_404_14@break;
    49. }
    50. @H_404_14@}
    51. }
    52. @H_404_14@if(bFind)
    53. {
    54. @H_404_14@TRACE("/n----find------/n");
    55. }
    56. @H_404_14@else
    57. {
    58. @H_404_14@TRACE("/n----nofind------/n");
    59. }


    9. 修改

      @H_404_14@CMarkupxml;
    1. BOOLbLoad=false;
    2. @H_404_14@BOOLbFind=false;
    3. bLoad=xml.Load("UserInfo1.xml");
    4. @H_404_14@if(bLoad)
    5. {
    6. @H_404_14@CStringstrID;
    7. CStringstrPwd;
    8. @H_404_14@xml.ResetMainPos();
    9. xml.FindElem();@H_732_404@//UserInfo
    10. @H_404_14@while(xml.FindChildElem("User"))
    11. {
    12. @H_404_14@strID=xml.GetChildAttrib("UserID");
    13. strPwd=xml.GetChildAttrib("UserPwd");
    14. @H_404_14@TRACE("/n----id:%s,strPwd);
    15. if(strID=="UserID00"&&strPwd=="UserPwd00")
    16. @H_404_14@{
    17. bFind=true;
    18. @H_404_14@xml.SetChildAttrib("UserID",strID+CString("Modify"));
    19. xml.Save("UserInfo1.xml");
    20. @H_404_14@break;
    21. }
    22. @H_404_14@}
    23. }
    24. @H_404_14@if(bFind)
    25. {
    26. @H_404_14@TRACE("/n----find------/n");
    27. }
    28. @H_404_14@else
    29. {
    30. @H_404_14@TRACE("/n----nofind------/n");
    31. }


    CMarkup字符集问题
    daubwu posted @ 2008年9月08日 00:54 in VC with tags XML CMarkup,38 阅读
    CMarkup支持Unicode,_MBCS宏定义。VS默认设置为MBCS宏定义,未设置该宏时为UTF-8编码。
    有 MBCS宏定义,且 打开的文件是UTF-8编码:
    CMarkup在Load时将UTF-8转换ANSI编码格式,所以要在读取的地方设置

      @H_404_14@#include<locale.h>
    1. setlocale(LC_ALL,"");


    没有MBCS宏定义,且打开的文件是UTF-8编码:
    系统默认将文件按UTF-8格式读入系统中,所以显示的时候要手动将数据转换为ANSI格式的进行显示

      @H_404_14@#include<locale.h>
    1. setlocale(LC_ALL,"");
    2. @H_404_14@strVal=CMarkup::UTF8ToA(strVal);


    PS:通过strcpy等拷贝函数可以修正

猜你在找的XML相关文章