shell 解析xml

有一个文本文件。如下:
<?xml version="1.0" encoding="UTF-8" ?>
<result>
<lrc id="189296" artist="陶晶莹" title="太委屈"></lrc>
<lrc id="1243" artist="xxx" title="vvv"></lrc>
</result>

如何查出中间两行,并给值到一个数组里 id[],artist[]和title[]里?
最后要列出来。并在以后使用这些变量。
本人实在很菜啊。目前只摸索出 cat a.xml | grep '</lrc>'
-_-! ...........差很远啊

solution 1:
#!/bin/bash

declare -a ids
declare -a artists
declare -a titles
tmp=`sed -n -e 's/<lrc //' -e 's/><\/lrc>//p' $1 | sed -e 's/id="//' -e 's/artist="//' -e 's/title="//' -e 's/"//g'`

lrc=($(echo $tmp))
for((i=0, j=0; i<${#lrc
  • }; i++, j++)) do
       #echo "${lrc[i]}--${lrc[++i]}--${lrc[++i]}"
       ids[j]=${lrc[i]}
       artists[j]=${lrc[++i]}
       titles[j]=${lrc[++i]}
    done

    for((k=0; k<${#ids
  • }; k++))

    do
       echo "id: ${ids[k]}--artist: ${artists[k]}--title: ${titles[k]}"
    done

    将以上代码保存为xmlparser.sh
    代码:
    <?xml version="1.0" encoding="UTF-8" ?>
    <result>
    <lrc id="189296" artist="陶晶莹" title="太委屈"></lrc>
    <lrc id="1243" artist="xxx" title="vvv"></lrc>
    </result>

    将以上代码保存为test.xml
    然后在终端执行
    引用:
    ./xmlparser.sh test.xml

    结果如下:
    引用:
    ranfow@ranfow-laptop:~/codes/sh$ ./xmlparser.sh test.xml
    id: 189296--artist: 陶晶莹--title: 太委屈
    id: 1243--artist: xxx--title: vvv


    solution 2:
    cat a.xml | grep '</lrc>'|sed "s/<lrc //;s/><\/lrc>//;s/id=/id[NUM]=/;s/artist=/artist[NUM]=/;s/title=/title[NUM]=/;s/\"\ /\";/g"|while read line;do
        echo "${line//NUM/${i:-0}}"
        ((i++))
    done >/tmp/source
    . /tmp/source
    rm /tmp/source
    for((j=0; j<${#id[@]}; j++));do
       echo -e "id[$j]: ${id[j]}\nartist[$j]: ${artist[j]}\ntitle[$j]: ${title[j]}"
    done


    不过有临时文件不爽。。。。

    solution 3:
    cat a.xml | grep '</lrc>'|sed "s/<lrc //;s/><\/lrc>//;s/=/[NUM]=/g;s/\"\ /\";/g"|while read line;do
        echo "${line//NUM/${i:-0}}"
        ((i++))
    done >/tmp/source
    . /tmp/source
    rm /tmp/source
    for((j=0; j<${#id[@]}; j++));do
       echo -e "id[$j]: ${id[j]}\nartist[$j]: ${artist[j]}\ntitle[$j]: ${title[j]}"
    done

     

     

    http://jebai0521.iteye.com/blog/976949

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值