免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7744 | 回复: 9
打印 上一主题 下一主题

有没有哪个xml类库能支持解析xml字符串的? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-15 17:03 |只看该作者 |倒序浏览
10可用积分
我想找一个类库来解析和生成xml格式的字符串

在网上看到说TinyXML库不错,够小够快

不过下载下来后发现只提供了读xml文件和输出到xml文件的功能 没找到从字符串读的

有人用过这个类库吗? 是不是真的只提供文件操作这么郁闷?  有没有哪个xml类库能支持解析xml字符串的?

最佳答案

查看完整内容

TinyXML 可以满足你的需要。不过没有什么特别需要的话,最好不使用XML。TiXmlDocument:arsefriend std::string& operator

论坛徽章:
0
2 [报告]
发表于 2009-12-15 17:03 |只看该作者
TinyXML 可以满足你的需要。不过没有什么特别需要的话,最好不使用XML。
TiXmlDocument:arse

friend std::string& operator<< (std::string& out, const TiXmlNode& base );

[ 本帖最后由 pagx 于 2009-12-15 18:19 编辑 ]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
3 [报告]
发表于 2009-12-15 17:24 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2009-12-15 17:32 |只看该作者
如果你用linux系统的话,glib里就有XML支持,挺好用的。

论坛徽章:
0
5 [报告]
发表于 2009-12-15 17:44 |只看该作者
iksemel

论坛徽章:
0
6 [报告]
发表于 2009-12-15 19:09 |只看该作者
libxml2呢?

论坛徽章:
0
7 [报告]
发表于 2009-12-15 19:30 |只看该作者
TinyXML可以处理字符串!

论坛徽章:
0
8 [报告]
发表于 2009-12-16 17:14 |只看该作者
很简单,你可以直接使用 strstr() 搜索起止标签,你就可以得到对应的标签定义数据。

论坛徽章:
0
9 [报告]
发表于 2009-12-16 17:21 |只看该作者

  1. //
  2. // 对输入缓冲区 xmlStr 进行扫描,检索 xmlKey 对应标签定义数据。
  3. // 首尾标签检索错误时,xmlVal为空值,打印错误日志,返回 -1,
  4. // 成功时将 XML 报文中该标签数据保存在 xmlVal 中,返回 0.
  5. //
  6. // 注意本程序在处理时,已经对标签数据中的 space() 类信息进行删除。
  7. //
  8. // 程序中增加对简化标签 <tagName/> ====== 的支持
  9. //
  10. int getXmlKeyVal(char *xmlStr, char *xmlKey, char *xmlVal)
  11. {
  12.     int  len;
  13.     char *ptr1 ,                   // 开始标签检查指针
  14.          *ptr2 ,                   // 结束标签检查指针
  15.          temp[XML_FIELDLEN];       // 保存 XML 标签的临时变量

  16.     *xmlVal = 0x00;
  17.     len = snprintf(temp, sizeof(temp)-1, "<%s/>", xmlKey);
  18.     if( strstr(xmlStr, temp) ) return 0;
  19.     // 检查到一个合法的空标签定义,根据规则,这时是没有定义数据的,程序返回。  
  20.    
  21.     len = snprintf(temp, sizeof(temp)-1, "<%s>" , xmlKey);    // xml 开始标志
  22.     if ( (ptr1 = strstr(xmlStr, temp)) == NULL) {
  23.       fprintf(stderr, "开始标签 [%s] 无法检索\n",  temp);
  24.       return -1;
  25.     }
  26.       
  27.    
  28.     ptr1 += len ;
  29.     while( isspace( ptr1[0]) ) ptr1 ++;
  30.     // 对开始标志后面的数据 前导空格 进行清理。
  31.    
  32.     len = snprintf(temp, sizeof(temp)-1, "</%s>" , xmlKey);   
  33.     // xml 结束标志,只需要在开始标志后面检索结束标志  
  34.    
  35.     if ( (ptr2 = strstr(ptr1, temp)) == NULL) {
  36.       fprintf(stderr, "结束标签 [%s] 无法检索\n",  temp );
  37.       return -1;
  38.     }
  39.    
  40.     while( isspace(ptr2[-1]) && ptr2 > ptr1 ) ptr2 --;
  41.     // 对结束标志前面的有效数据 后置空格 进行删除。
  42.   
  43.     if (ptr2 > ptr1){
  44.         memcpy(xmlVal, ptr1, ptr2 - ptr1);
  45.         xmlVal[ptr2 - ptr1] = 0x00;
  46.     }  
  47.     return 0;
  48. }
复制代码



  1. //
  2. // 对 XML 报文中一个 tagName/keyName 域数据进行更新,只有原先存在该数据标签时,
  3. // 程序进行处理。
  4. //
  5. int updXmlTagKey(char *xmlStr, char  *tagName, char *keyName, char  *keyVal)
  6. {
  7.     int   len;
  8.     char  *ptr1,
  9.           *ptr2,
  10.           *bak ,
  11.           temp[XML_FIELDLEN];
  12.       
  13.     len = sprintf(temp, "<%s>", tagName);
  14.     if( (ptr1 = strstr(xmlStr, temp)) == NULL ) {
  15.       fprintf(stderr, "检查 tagName 开始标签 %s 错误\n", temp);
  16.       return -1;
  17.     }
  18.     ptr1 += len;
  19.     // tagName 开始标签定位
  20.    
  21.     len = sprintf(temp, "</%s>", keyName);
  22.     if( (ptr2 = strstr(ptr1, temp)) == NULL ) {
  23.       fprintf(stderr, "检查 keyName 结束标签 %s 错误\n", temp);
  24.       return -2;
  25.     }
  26.     // keyName 结束标签定位
  27.    
  28.     bak = strdup(ptr2);
  29.     // 对结束标签以后的数据进行备份。
  30.    
  31.     len = sprintf(temp, "<%s>", keyName);
  32.     if( (ptr1 = strstr(ptr1, temp)) == NULL ) {
  33.       fprintf(stderr, "检查 keyName 开始标签 %s 错误\n", temp);
  34.       return -3;
  35.     }
  36.    
  37.     ptr1 += len;
  38.     // keyName 开始标签定位
  39.    
  40.     *ptr1 = 0x00;
  41.     sprintf(ptr1, "%s%s", keyVal ? keyVal : "", bak );
  42.     // 将新的数据添加到XML 报文串中。
  43.     free(bak);
  44.       
  45.     return 0;
  46. }
复制代码


以上就是从 xml 中读取数据和修改数据的例子。

[ 本帖最后由 ljmmail 于 2009-12-16 17:25 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-12-18 10:03 |只看该作者
原帖由 pagx 于 2009-12-15 17:03 发表
TinyXML 可以满足你的需要。不过没有什么特别需要的话,最好不使用XML。
TiXmlDocument:: Parse

friend std::string& operator <<

谢谢 既然这个库有提供就用它吧 正好我下载了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP