免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: 绿茶主演
打印 上一主题 下一主题

请问C如何解析xml里含标签和一大堆字符!(已解决) [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
21 [报告]
发表于 2006-11-17 11:26 |只看该作者
原帖由 绿茶主演 于 2006-11-17 11:25 发表
不好意思,大侠,我想再问问,像我开始说的那种xml格式,不转换编码,到底有没有办法解析呢!

这个不是有没有办法的问题。
而是你愿意不愿意把东西做好的问题。
我从来不会帮人制造垃圾。

论坛徽章:
0
22 [报告]
发表于 2006-11-17 11:26 |只看该作者
tinyxml

短小精悍

论坛徽章:
0
23 [报告]
发表于 2006-11-17 11:51 |只看该作者
成垃圾啦,呵呵!规范规范应该的!

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015元宵节徽章
日期:2015-03-06 15:50:39
24 [报告]
发表于 2006-11-17 15:15 |只看该作者

.

流程中C处理XML的地方多么 ,有否用到soap协议

论坛徽章:
0
25 [报告]
发表于 2006-11-17 15:24 |只看该作者
给你base64
的C版本

  1. /*ChinaDream */
  2. #include <stdio.h>

  3. char *B64ENC(char *pszIn,char *pszOut,int iLen)
  4. {
  5.         const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  6.         unsigned char        CDE[3];
  7.         if(iLen > 0)
  8.         {
  9.                 if(iLen > 3)
  10.                 {
  11.                         iLen = 3;
  12.                 }
  13.                
  14.                 memcpy(CDE,pszIn,iLen);

  15.                 pszOut[0] = cb64[ CDE[0] >> 2 ];
  16.                 pszOut[1] = cb64[ ((CDE[0] & 0x03) << 4) | ((CDE[1] & 0xf0) >> 4) ];
  17.                 if(iLen > 1)
  18.                 {
  19.                         pszOut[2] = cb64[ ((CDE[1] & 0x0f) << 2) | ((CDE[2] & 0xc0) >> 6) ];
  20.                 }
  21.                 else
  22.                 {
  23.                         pszOut[2] = '=';
  24.                 }
  25.                
  26.                 if(iLen > 2)
  27.                 {
  28.                         pszOut[3] = cb64[ CDE[2] & 0x3f ];
  29.                 }
  30.                 else
  31.                 {
  32.                         pszOut[3] = '=';
  33.                 }
  34.         }
  35.         return (pszOut);
  36. }

  37. char *B64DEC(char *pszIn,char *pszOut)
  38. {
  39.         const char cd64[]="|$$$}rstuvwxyz{$$$$$$$>?@ABCDEFGHIJKLMNOPQRSTUVW$$$$$$XYZ[\\]^_`abcdefghijklmnopq";
  40.         unsigned char        CDE[4];
  41.         memcpy(CDE,pszIn,4);

  42.         if ((CDE[0] != '=') && (CDE[1] != '='))
  43.         {
  44.                 CDE[0] = cd64[CDE[0] - 43] - 62;
  45.                 CDE[1] = cd64[CDE[1] - 43] - 62;
  46.                 pszOut[0] = CDE[0] << 2 | CDE[1] >> 4;
  47.                 if (CDE[2] != '=')
  48.                 {
  49.                         CDE[2] = cd64[CDE[2] - 43] - 62;
  50.                         pszOut[1] = CDE[1] << 4 | CDE[2] >> 2;
  51.             if (CDE[3] != '=')
  52.                         {
  53.                  CDE[3] = cd64[CDE[3] - 43] - 62;
  54.                  pszOut[2] = ((CDE[2] << 6) & 0xc0) | CDE[3];
  55.                         }
  56.                         else
  57.                         {
  58.                                 pszOut[2]=0;
  59.                         }

  60.                 }
  61.                 else
  62.                 {
  63.                         pszOut[1]=0;       
  64.                 }

  65.         }
  66.         return (pszOut);
  67. }


  68. char *B64ENCCODE(char *pszIn,char *pszOut,int iLen)
  69. {
  70.         int                i;
  71.         int                iDIV;
  72.         int                iMOD;
  73.         char        *pszSrc;
  74.         char        *pszDes;

  75.         pszSrc        = pszIn;
  76.         pszDes        = pszOut;
  77.         iDIV        = (iLen / 3);
  78.         iMOD        = (iLen % 3);
  79.         for(i=0;i<iDIV;i++)
  80.         {
  81.                 B64ENC(pszSrc,pszDes,3);
  82.                 pszSrc+=3;
  83.                 pszDes+=4;
  84.         }
  85.         if(iMOD >0)
  86.         {
  87.                 B64ENC(pszSrc,pszDes,iMOD);
  88.                 pszSrc+=3;
  89.                 pszDes+=4;
  90.         }
  91.         *pszDes = 0;
  92.         return (pszOut);
  93. }

  94. char *B64DECCODE(char *pszIn,char *pszOut,int iLen)
  95. {
  96.         int                i;
  97.         int                iDIV;
  98.         char        *pszSrc;
  99.         char        *pszDes;

  100.         pszSrc        = pszIn;
  101.         pszDes        = pszOut;
  102.         iDIV        = (iLen / 4);
  103.         for(i=0;i<iDIV;i++)
  104.         {
  105.                 B64DEC(pszSrc,pszDes);
  106.                 pszSrc+=4;
  107.                 pszDes+=3;
  108.         }
  109.         *pszDes = 0;
  110.         return (pszOut);
  111. }

  112. /*
  113. void main()
  114. {
  115.         char        In[]="用C对BASE64加密实现!太烦了!!!!!测试!!!!!!";
  116.         char        Out[2048]={0};
  117.         char        Tmp[128]={0};
  118.         B64ENCCODE(In,Out,strlen(In));
  119.         printf("ENCCODE=%s\n",Out);
  120.         B64DECCODE(Out,Tmp,strlen(Out));
  121.         printf("DECCODE=%s\n",Tmp);
  122. }
  123. */
复制代码

论坛徽章:
0
26 [报告]
发表于 2006-11-19 12:28 |只看该作者
你的 root 中连这个:<for></for> 都有,说不定还可能出现 </root> , 叫人怎么解析?

论坛徽章:
0
27 [报告]
发表于 2006-11-20 13:09 |只看该作者

回复 25楼 ChinaDream 的帖子

噢,非常感谢,嘿嘿,这就做研究用了!

论坛徽章:
0
28 [报告]
发表于 2006-11-20 16:20 |只看该作者
原帖由 绿茶主演 于 2006-11-16 18:53 发表
问题是这样的:有如下这种类型的xml:
<request>
        <get></get>
                <info>
                 <root>jfkakjl;k#%$%!???<<fdsa<for></for>dafsaergrew</root& ...


叫你们的前台这样写就是可以的。


  1. <request>
  2.         <get></get>
  3.                 <info>
  4.                     <root><![CDATA[jfkakjl;k#%$%!???<<fdsa<for></for>dafsaergrew]]></root>
  5.         </info>
  6. </request>

复制代码

论坛徽章:
0
29 [报告]
发表于 2006-11-21 09:50 |只看该作者

回复 28楼 MackedNice 的帖子

兄台,你的方法我试了一下,行不通啊,解析出错了!

论坛徽章:
0
30 [报告]
发表于 2006-11-21 12:46 |只看该作者

回复 28楼 MackedNice 的帖子

哦,不好意思 ,是我搞错了,呵呵,兄台你的方法真行!!呵呵,多谢啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP