shell脚本解析xml文件,获取body内容

gelyon 2014-10-31 07:42:43
各位看官好,本人对shell脚本初出茅庐,有个问题想请教哈大家,麻烦大牛帮看看:

问题描述:
现在有个xml文件的数据,此xml里面有节点DATA_NAME,DATABODY里面的内容是我想要的数据,但每个DATABODY是分页了的,比如每10笔数据分为一页PAGE,我想要将所有PAGE的内容,输入到一个文本文件,名称DATA_NAME节点值。
举例:

文件名类似:99200000000_AMRGT_CONV_0000_20130427_I_0305_0001.xml
xml数据格式如下:

<?xml version="1.0" encoding="GB2312"?>
<DATAFILE>
<DATAHEAD>
<DATA_NAME>AMRGT_CONV</DATA_NAME>
<DATA_TYPE>I</DATA_TYPE>
<ROW_NUM>0000000013</ROW_NUM>
<PAGE_NUM>00000002</PAGE_NUM>
<FIELD_NUM>6</FIELD_NUM>
<FIELDS>
<FIELD ID='1'>INTER_ACCT</FIELD>
<FIELD ID='2'>ACCOUNT</FIELD>
<FIELD ID='3'>SUBACCT</FIELD>
<FIELD ID='4'>PACT_TERM</FIELD>
<FIELD ID='5'>DEFER_TERM</FIELD>
<FIELD ID='6'>CONTRACT</FIELD>
</FIELDS>
</DATAHEAD>
<DATABODY>
<PAGE PAGENO ='1' RECORDNUM='10'>
1029451|+|944002010000541249|+|999|+|12|+|0|+|31312|-|
996941|+|100870912250012222|+|999|+|12|+|0|+|888888888555555|-|
1029716|+|961009010000055621|+|999|+|12|+|0|+|qwwew|-|
1030582|+|961003010000132335|+|999|+|12|+|12|+|22222|-|
1029694|+|937006010000000001|+|999|+|3|+|0|+|742947974382977|-|
1029057|+|944001010000528906|+|999|+|3|+|0|+|11111111111111111111|-|
1030198|+|944000010000580009|+|999|+|3|+|0|+|11111111111111111111|-|
950152|+|100830440700010001|+|999|+|12|+|12|+|3456789|-|
1030578|+|961000010000118816|+|999|+|12|+|0|+|123456|-|
1030611|+|961005010000132341|+|999|+|12|+|0|+|11|-|
</PAGE>
<PAGE PAGENO ='2' RECORDNUM='3'>
1027383|+|144003010000412232|+|999|+|3|+|0|+|11111111111111111111|-|
8006634|+|961007010000675750|+|999|+|12|+|0|+|342343|-|
1031152|+|961004010000261315|+|999|+|6|+|6|+|56568383838385656|-|
</PAGE>
</DATABODY>
</DATAFILE>

最终想要的结果是:
文本文件名称:AMRGT_CONV.txt
文本内容:
1029451|+|944002010000541249|+|999|+|12|+|0|+|31312|-|
996941|+|100870912250012222|+|999|+|12|+|0|+|888888888555555|-|
1029716|+|961009010000055621|+|999|+|12|+|0|+|qwwew|-|
1030582|+|961003010000132335|+|999|+|12|+|12|+|22222|-|
1029694|+|937006010000000001|+|999|+|3|+|0|+|742947974382977|-|
1029057|+|944001010000528906|+|999|+|3|+|0|+|11111111111111111111|-|
1030198|+|944000010000580009|+|999|+|3|+|0|+|11111111111111111111|-|
950152|+|100830440700010001|+|999|+|12|+|12|+|3456789|-|
1030578|+|961000010000118816|+|999|+|12|+|0|+|123456|-|
1030611|+|961005010000132341|+|999|+|12|+|0|+|11|-|
1027383|+|144003010000412232|+|999|+|3|+|0|+|11111111111111111111|-|
8006634|+|961007010000675750|+|999|+|12|+|0|+|342343|-|
1031152|+|961004010000261315|+|999|+|6|+|6|+|56568383838385656|-|


请教哈大牛,怎么用shell脚本来获取我想要的内容?
麻烦各位了。。。
...全文
708 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
gelyon 2015-02-09
  • 打赏
  • 举报
回复
早已解决,换种方式实现
csuwqz 2014-11-12
  • 打赏
  • 举报
回复
用shell脚本解析xml,完全是蛋疼,格式和换行稍微变化就不适用了。干嘛不用python等有专用库的语言?
gelyon 2014-11-04
  • 打赏
  • 举报
回复
我这边写了个,但是生成的文件名是有个问号,是啥原因啊?、、 #!/bin/sh count=0 for xmlfile in *.xml do if [ -f $xmlfile ];then count=`expr $count + 1` #file_name=`basename $xmlfile .xml` table_name=`sed -n 's/.*>\(.*\)<\/DATA_NAME>/\1/p' $xmlfile` echo table_name=$table_name awk '/<\/PAGE/{P=0}/^<PAGE PAGENO/{P=1;next}P' $xmlfile > temp.out sed 's/|-|/|+|/g' temp.out > temp.dat mv temp.dat $table_name.dat fi done rm temp* echo "xml file count is $count" 最后生成的文件是AMRGT_CONVdat 但是我echo显示出来的是正常的。。。
gelyon 2014-11-02
  • 打赏
  • 举报
回复
顶一下~

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧