免费注册 查看新帖 |

Chinaunix

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

求助:shell怎么获取XML属性名称和属性值并打印出来? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-19 10:28 |只看该作者 |倒序浏览
例如, XML文件:
<article>
  <title1>a1</titlel1>
  <title2>a2</titlel2>
  <title3>a3</titlel3>
</article>


怎么用shell得到如下输出:
title1::a1
title2::a2
title3::a3

小弟先谢谢了。

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
2 [报告]
发表于 2012-06-19 10:29 |只看该作者
xpath

论坛徽章:
0
3 [报告]
发表于 2012-06-19 10:31 |只看该作者
能给个示例吗?
回复 2# ziyunfei


   

论坛徽章:
0
4 [报告]
发表于 2012-06-19 10:42 |只看该作者
求高手指点。谢谢。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2012-06-19 13:31 |只看该作者
回复 1# qiu0204


    用shell来解析XML并不适合,除非你非常了解它的框架,否则还是用专门的XML解析工具来弄,比如2楼的
仅就你给点数据:
  
echo '<article>
  <title1>a1</titlel1>
  <title2>a2</titlel2>
  <title3>a3</titlel3>
</article>' |awk '/<title[0-9]+/{print gensub(/<([^>]+)>([^<]+)<\/.*/,"\\1::\\2",1)}'
  title1::a1
  title2::a2
  title3::a3

论坛徽章:
0
6 [报告]
发表于 2012-06-19 16:33 |只看该作者

非常感谢你的答复。
如果属性名称没有规律,您给出的命令还又办法修改吗?比如XML问价如果是:

<article>
  <name>xyz</name>
  <gender>female</gender>
  <education>degree</education>
</article>

望您不吝赐教。多谢!
回复 5# yinyuemi


   

论坛徽章:
0
7 [报告]
发表于 2012-06-19 17:03 |只看该作者
回复 6# qiu0204


    其实上面都说了,这个事情不适合用shell来做。。。
以下假定数据严格遵守
  1. <article>
  2. <name>xyz</name>
  3. <gender>female</gender>
  4. <education>degree</education>
  5. </article>
复制代码
这个形式
  1. personball@vostro:SHELL$awk -F'<|>' '{if(NF>3){print $2 "::" $3}}' xmltext
  2. name::xyz
  3. gender::female
  4. education::degree
  5. personball@vostro:SHELL$cat xmltext
  6. <article>
  7. <name>xyz</name>
  8. <gender>female</gender>
  9. <education>degree</education>
  10. </article>
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-06-19 17:35 |只看该作者
回复 7# personball


     非常感谢,我改了下你第一次给我的代码,貌似也可以:


echo '<article>
  <name>a1</name>
  <gender>a2</gender>
  <education>a3</education>
</article>' |awk '/<name|gender|education+/{print gensub(/<([^>]+)>([^<]+)<\/.*/,"\\1::\\2",1)}'

论坛徽章:
0
9 [报告]
发表于 2012-06-19 17:38 |只看该作者
本帖最后由 jils2013 于 2012-06-19 17:46 编辑

以前折腾过这个,xml文件格式感觉很自由
有些是<value name="abc">123</value>
有些又是<xxx><name>abc</name><value>123</value></xxx>
在我看来以上差不多,但是不同的人写来都一样;


其他的方面shell和xml也不一样,比如关键字符 shell里面的空格(类似的还有单引号双引号)在xml很随意到处都是,所以处理值以前,基本所有的类似shell敏感关键词都要做处理,非常难受;

show一个当时入值转义的小函数:
  1.       function strconvert(str)
  2.        {
  3.         gsub("\\\?","\\\?",str);
  4.         gsub("\\\$","\\\$",str);
  5.         gsub("\\\(","\\\(",str);
  6.         gsub("\\\)","\\\)",str);
  7.         gsub("\\\|","\\\|",str);
  8. #        print "@strconver@"str;
  9.         return str;
  10.        }
复制代码
这些还只是我有限遇到的几十个里面碰到的符号;
如果赶上有想象力不按规矩出牌的不知道会有什么特殊的东西;
当时折腾几个月,写出来的又臭又长,最后遇到一个,把一个超长数据库描述符 直接写在一个记录里;直接超出了hpux 上awk处理单行记录上限,太悲剧了

论坛徽章:
0
10 [报告]
发表于 2012-06-19 17:41 |只看该作者
不过如果xml写作风格很统一的话,还是可以尝试的,但是想特别全面的处理xml文件,很难受
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP