免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2012-07-24 10:33 |只看该作者
本帖最后由 bpzhang2008 于 2012-07-24 10:37 编辑

解析的xml文件repores.xml
  <?xml version="1.0" ?>
- <unittest-results tests="13" failedtests="2" failures="5" time="5.013">
  <test suite="mytestsuite" name="usemacrosasinput" time="0" />
  <test suite="mytestsuite" name="usecustomfileok" time="0" />
  <test suite="mytestsuite" name="customfilisnull" time="0" />
  <test suite="mytestsuite" name="filewasnotexits" time="0" />
  <test suite="mytestsuite" name="filenoringht" time="0" />
  <test suite="mytestsuite" name="getconfitem" time="0" />
  <test suite="mytestsuite" name="testsetconfitem" time="0" />
- <test suite="mytestsuite" name="testsetkeynull" time="0">
  <failure message="testlibsetting.cpp(221) : Expected 0 but was -2147483644" />
  </test>
- <test suite="mytestsuite" name="testsetvalues" time="0.004">
  <failure message="testlibsetting.cpp(277) : Expected but was" />
  <failure message="testlibsetting.cpp(289) : Expected but was :" />
  <failure message="testlibsetting.cpp(301) : Expected but was" />
  <failure message="testlibsetting.cpp(313) : Expected but was =" />
  </test>
  <test suite="mytestsuite" name="setvaluetwice" time="0" />
  <test suite="mytestsuite" name="nowritetoconfigfile" time="0" />
  <test suite="mytestsuite" name="testgetallconfitem" time="0.003" />
  <test suite="mytestsuite" name="testregistercallbackmethod" time="5.002" />
  </unittest-results>


下面这个是我想要的结果
alltests=13 failedtests=2 success=11
casename=usemacrosasinput           result=success
casename=usecustomfileok              result=success
casename=customfilisnull                 result=success
casename=filewasnotexits                     result=success
casename=filenoringht                             result=success
casename=getconfitem                     result=success
casename=testsetconfitem                     result=success
caename=testsetkeynull                   result=failure
failure message="testlibsetting.cpp(221) : Expected 0 but was -2147483644"
casename=testsetvalues  result=failure
failure message="testlibsetting.cpp(277) : Expected but was"
failure message="testlibsetting.cpp(289) : Expected but was :"
failure message="testlibsetting.cpp(301) : Expected but was"
failure message="testlibsetting.cpp(313) : Expected but was ="
casename=setvaluetwice                                                                result=success
casename=nowritetoconfigfile                                                        result=success
casename=testgetallconfitem                                                        result=success
casename=testregistercallbackmethodc                                         result=success


对于那个失败的,如果不好操作就直接按照下面这种
- <test suite="mytestsuite" name="testsetkeynull" time="0">
  <failure message="testlibsetting.cpp(221) : Expected 0 but was -2147483644" />
  </test>
- <test suite="mytestsuite" name="testsetvalues" time="0.004">
  <failure message="testlibsetting.cpp(277) : Expected but was" />
  <failure message="testlibsetting.cpp(289) : Expected but was :" />
  <failure message="testlibsetting.cpp(301) : Expected but was" />
  <failure message="testlibsetting.cpp(313) : Expected but was =" />
  </test>

输出也可以
回复 10# jiejie455


   

论坛徽章:
0
12 [报告]
发表于 2012-07-24 11:01 |只看该作者
能力有限勉强符合要求,楼主自己改一改吧,或者坐等版主出马。
  1. sed -nr '/<unittest-results/p;s/<test.*name="([^"]*)".*\/>/casename=\1 \tresult=success/p;/<test.*[^\/]>/{:1 N;/<\/test>/!b1;p}' data
复制代码

论坛徽章:
0
13 [报告]
发表于 2012-07-24 11:07 |只看该作者
我要的就是这样的

[root@over zbp]# sed -nr '/<unittest-results/p;s/<test.*name="([^"]*)".*\/>/casename=\1 \tresult=success/p;/<test.*[^\/]>/{:1 N;/<\/test>/!b1;p}' reports.xml
<unittest-results tests="13" failedtests="2" failures="5" time="5.013">
casename=usemacrosasinput         result=success
casename=usecustomfileok         result=success
casename=customfilisnull         result=success
casename=filewasnotexits         result=success
casename=filenoringht         result=success
casename=getconfitem         result=success
casename=testsetconfitem         result=success
casename=testsetkeynull         result=success
</test>casename=testsetvalues         result=success
</test>casename=setvaluetwice         result=success
casename=nowritetoconfigfile         result=success
casename=testgetallconfitem         result=success
casename=testregistercallbackmethod         result=success


请仁兄在帮忙看看我的有失败的那个用例为什么失败的错误信息没有输出来,这个地方</test>casename=setvaluetwice         result=success 这应该是失败的,或者不加成功失败直接输出
- <test suite="mytestsuite" name="testsetkeynull" time="0">
  <failure message="testlibsetting.cpp(221) : Expected 0 but was -2147483644" />
  </test>
- <test suite="mytestsuite" name="testsetvalues" time="0.004">
  <failure message="testlibsetting.cpp(277) : Expected but was" />
  <failure message="testlibsetting.cpp(289) : Expected but was :" />
  <failure message="testlibsetting.cpp(301) : Expected but was" />
  <failure message="testlibsetting.cpp(313) : Expected but was =" />
  </test>
这种可行么?

回复 12# jiejie455


   

论坛徽章:
0
14 [报告]
发表于 2012-07-24 11:11 |只看该作者
根据你的数据,在我这边(Centos 5.5 Final, GNU sed)执行的结果:
  1. $ sed -nr '/<unittest-results/p;s/<test.*name="([^"]*)".*\/>/casename=\1 \tresult=success/p;/<test.*[^\/]>/{:1 N;/<\/test>/!b1;p}' data
  2. - <unittest-results tests="13" failedtests="2" failures="5" time="5.013">
  3.   casename=usemacrosasinput     result=success
  4.   casename=usecustomfileok      result=success
  5.   casename=customfilisnull      result=success
  6.   casename=filewasnotexits      result=success
  7.   casename=filenoringht         result=success
  8.   casename=getconfitem  result=success
  9.   casename=testsetconfitem      result=success
  10. - <test suite="mytestsuite" name="testsetkeynull" time="0">
  11.   <failure message="testlibsetting.cpp(221) : Expected 0 but was -2147483644" />
  12.   </test>
  13. - <test suite="mytestsuite" name="testsetvalues" time="0.004">
  14.   <failure message="testlibsetting.cpp(277) : Expected but was" />
  15.   <failure message="testlibsetting.cpp(289) : Expected but was :" />
  16.   <failure message="testlibsetting.cpp(301) : Expected but was" />
  17.   <failure message="testlibsetting.cpp(313) : Expected but was =" />
  18.   </test>
  19.   casename=setvaluetwice        result=success
  20.   casename=nowritetoconfigfile  result=success
  21.   casename=testgetallconfitem   result=success
  22.   casename=testregistercallbackmethod   result=success
复制代码

论坛徽章:
0
15 [报告]
发表于 2012-07-24 11:17 |只看该作者
我要的就是这样结果,可为什么我执行了不是的这样的呢,我的是Red Hat Enterprise Linux Server release 5.4 (Tikanga) sed版本包sed-4.1.5-5.fc6

奇怪了
回复 14# jiejie455


   

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
16 [报告]
发表于 2012-07-24 11:39 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
17 [报告]
发表于 2012-07-24 11:55 |只看该作者
额不是吧,问题都解决了,但是在我的linux发行版上调试的结果不大一样
回复 16# zooyo


   

论坛徽章:
0
18 [报告]
发表于 2012-07-24 12:02 |只看该作者
本帖最后由 bpzhang2008 于 2012-07-24 14:13 编辑

11l有描述开始我写的不清楚,斑竹我楼上仁兄给出的方案在他的Linux发行版上可以但是在我的发行版(redhat)结果就有点出入,请问怎么回事?回复 16# zooyo


   

论坛徽章:
0
19 [报告]
发表于 2012-07-24 14:12 |只看该作者
你的sed版本是什么?我的结果还是有点小问题啊
回复 14# jiejie455


   

论坛徽章:
0
20 [报告]
发表于 2012-07-24 14:25 |只看该作者
本帖最后由 personball 于 2012-07-24 14:26 编辑

回复 19# bpzhang2008


    结果有出入,我猜不是sed版本的问题,lz把文件用dos2unix转化一下试试
仅做参考。

当然,能告知具体怎么个“出入”法,还可以继续猜。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP