免费注册 查看新帖 |

Chinaunix

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

[文本处理] 想把xml文件解析成一种直观便于阅读的文本比如HTML CVS [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-07-24 15:01 |只看该作者
应该不是SED版本的问题, 你的目标文件的格式有没有可能有问题?如果有的话,Dos2unix转换下。 我的结果是用你贴子贴子上的数据生成的,你可以用贴子的数据测试对比一下。
@bpzhang2008

论坛徽章:
0
22 [报告]
发表于 2012-07-24 15:17 |只看该作者
请看13l是我的执行结果,14l是那个仁兄的结果,我想获得的就是14l的那个结果
回复 20# personball


   

论坛徽章:
0
23 [报告]
发表于 2012-07-24 15:21 |只看该作者
这个文件生产在linux上的,文件格式应该没问题吧,刚才我也转换了下但是结果还是不太理想,就是对错误处理那一块

sed -nr '/<unittest-results/p;s/<test.*name="([^"]*)".*\/>/casename=\1 \tresult=success/p' reports.xml
这两种执行结果都一样,后面加的那一段感觉没生效啊
sed -nr '/<unittest-results/p;s/<test.*name="([^"]*)".*\/>/casename=\1 \tresult=success/p;/<test.*[^\/]>/{:1 N;/<\/test>/!b1;p}'  reports.xml
回复 21# jiejie455


   

论坛徽章:
0
24 [报告]
发表于 2012-07-25 10:57 |只看该作者
你那个代码是怎么贴近来的,我想把这个问题的解决办法发出来
回复 14# jiejie455


   

论坛徽章:
0
25 [报告]
发表于 2012-07-25 11:08 |只看该作者
  1. #!/bin/sh
  2. #
  3. usage()
  4. {
  5.     echo "Usage:" "$0 <report.xml>"
  6. }
  7. format()
  8. {
  9.     local xml=$1
  10.     local new=$2
  11.     #echo format::$xml

  12.     cat $xml | tr -d '\n' | sed 's/>/&\n/g' > $new
  13.     return $?
  14. }

  15. printHeader()
  16. {
  17.     local xml=$1
  18.     #echo $xml
  19.     local headerStr='<unittest-results'
  20.     head $xml | sed -nr '/<unittest/ s/<.*tests=*"([^"]*)".*failedtests=*"([^"]*)".*failures=*"([^"]*)".*>/alltests=\1\tfailedtests=\2\tfailures=\3/p'
  21. }

  22. parseBody()
  23. {
  24.     local xml=$1
  25.     cat $xml | awk 'BEGIN{i=0}\
  26.         {\
  27.             # print "parseBody::test1"
  28.             if(i == 0){\
  29.                 #print "parseBody::test 0 branch";

  30.                 if($0 ~ /<test.*\/>/){\
  31.                     split($3,str,"\"");\
  32.                     print "casename=" str[2] "\tresult=success"}\
  33.                 else if($0 ~ /<test.*>/){\
  34.                     split($3,str,"\"");\
  35.                     i=1;
  36.                     print "casename=" str[2] "\tresult=failed"\
  37.                 }\
  38.             } \
  39.         else{\
  40.             #print "parseBody::test 1 branch";
  41.             if($0 ~ /failure/){\
  42.                 split($0,msg,"\"");print msg[2]\
  43.             }\
  44.         else if($0 ~ /<\/test>/){\
  45.             i=0\
  46.         }\
  47.     }\
  48. }'
  49. #echo "test"
  50. }



  51. main()
  52. {
  53.     #echo $#
  54.     if [ $# -ne 1 ] ; then
  55.         usage
  56.         exit 1
  57.     fi

  58.     local xml=$1
  59.     local formated=${xml}.tmp
  60.     #echo $xml

  61.     format $xml $formated
  62.     if [ $? -ne 0 ] ; then
  63.         echo "[ERROR] Formating failed!"
  64.         exit 1
  65.     fi

  66.     printHeader $formated

  67.     parseBody $formated

  68. }

  69. #echo $*
  70. main $*
复制代码
这个是请我一个同学帮我最终用shell搞定的结果,jiejie455 的也是可以的但是前提是xml要经过整理,有时候我的xml文件输出很乱,shell很强大啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP