免费注册 查看新帖 |

Chinaunix

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

[C] 如何删除xml中的空格 [复制链接]

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
11 [报告]
发表于 2014-02-21 14:22 |只看该作者
本帖最后由 Herowinter 于 2014-02-21 14:23 编辑

回复 10# yyx_attach
没看出来上面的代码用C实现有什么问题。
另外我很疑惑的是,为什么一定要用C呢?
Shell Perl Python几行代码就能处理好的文本,
你非要写几十行C代码去处理。


   

论坛徽章:
0
12 [报告]
发表于 2014-02-21 14:50 |只看该作者
回复 11# Herowinter


    我用的uc3系统,不支持perl等。或者说要支持的话得付费。

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
13 [报告]
发表于 2014-02-21 14:57 |只看该作者
回复 12# yyx_attach
我等下写一个C代码给你。


   

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
14 [报告]
发表于 2014-02-21 15:03 |只看该作者
回复 12# yyx_attach
C代码,输入文件in.txt 结果文件out.txt
Note: <aaa bbb>会变成<aaabbb>
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX_CHAR 1000

  5. int main(){
  6.     FILE *fpin, *fpout;
  7.     char lineSrc[MAX_CHAR+1];
  8.     char lineDest[MAX_CHAR+1];
  9.    
  10.     if((fpin = fopen ("in.txt", "r")) == NULL){
  11.         perror ("File in.txt open error!\n");
  12.         exit(1);
  13.     }
  14.     if((fpout = fopen ("out.txt", "w")) == NULL){
  15.         perror ("File out.txt open error!\n");
  16.         exit(1);
  17.     }
  18.    
  19.     while((fgets(lineSrc, MAX_CHAR, fpin)) != NULL){
  20.         int i = 0;
  21.         int j = 0;
  22.         int flag = 0;
  23.         memset(lineDest,0,MAX_CHAR+1);
  24.         while(i<strlen(lineSrc)){
  25.             char c = lineSrc[i];
  26.             if(c=='<')
  27.                 flag = 1;
  28.             else if(c=='>')
  29.                 flag = 0;
  30.             if(flag==0||c!=' ')
  31.                 lineDest[j++] = lineSrc[i++];
  32.             else
  33.                 i++;   
  34.         }
  35.         fprintf(fpout,"%s",lineDest);
  36.     }
  37.    
  38.     fclose(fpin);
  39.     fclose(fpout);
  40.     return 0;
  41. }
复制代码

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
15 [报告]
发表于 2014-02-21 15:20 |只看该作者
回复 7# folklore


    有可能他本来的xml不知什么原因多了空格,变成不合法的了。否则这么做真是完蛋了。

另外,属性字符串中的空格也需要考虑。

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
16 [报告]
发表于 2014-02-21 15:47 |只看该作者
本帖最后由 Herowinter 于 2014-02-21 15:51 编辑

回复 15# zhaohongjian000
如果属性中的空格要保留那就直接处理
紧跟在'<'后 或 '>'前的空格就行了,
这个用正则替换很容易呀。

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
17 [报告]
发表于 2014-02-21 15:58 |只看该作者
本帖最后由 Herowinter 于 2014-02-21 16:04 编辑

回复 15# zhaohongjian000
比如说这样,属性aaa bbb中间的空格得到了保留。
  1. awk '{gsub(/< */,"<");gsub(/<\/ */,"</");gsub(/ *>/,">")}1' in.txt
  2. <gw-info>
  3.     <name>DK RJ45 Gateway</name>
  4.     <version>1.0.0</version>
  5. </gw-info>
  6. <gw-addr>
  7.     <port>8008</port>
  8. </gw-addr>
  9. <gw-addr2>
  10.     <aaa bbb>abcdef<aaa bbb>
  11. </gw-addr2>


  12. cat in.txt
  13. < gw-info  >
  14.     <name  >DK RJ45 Gateway</  name>
  15.     <version>1.0.0</version  >
  16. </gw-info  >
  17. <gw-addr  >
  18.     <port>8008</port  >
  19. </ gw-addr>
  20. <gw-addr2  >
  21.     < aaa bbb >abcdef< aaa bbb >
  22. </ gw-addr2>
复制代码

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
18 [报告]
发表于 2014-02-21 16:32 |只看该作者
回复 17# Herowinter


    属性是指这样:
  1. <node attr="123   456"></node>
复制代码

论坛徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
19 [报告]
发表于 2014-02-21 16:43 |只看该作者
本帖最后由 Herowinter 于 2014-02-21 16:47 编辑

回复 18# zhaohongjian000
这种和我举的例子一样的,都不是紧邻<或 >的空格。
  1. echo "< node attr=\"123   456\" ></ node >"|awk '{gsub(/< */,"<");gsub(/<\/ */,"</");gsub(/ *>/,">")}1'
  2. <node attr="123   456"></node>
复制代码

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
20 [报告]
发表于 2014-02-22 11:28 |只看该作者
楼主的需求完全不清。是要删除属性值中的空格,还是属性结点间的空格,还是全部。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP