shell 解析xml

转载 2013年12月06日 10:17:05
有一个文本文件。如下:
<?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

awk解析xml

?xml version="1.0"?> system> machine name="web01" > server name="log_collect"> ...
  • Chinamming
  • Chinamming
  • 2013年12月07日 01:25
  • 4607

如何方便的使用shell脚本来解析xml文件

最近在项目中,需要用到shell脚本来解析xml文件。在网上搜了一下,发现有xmlsh等可以用,但是都需要下载安装,使用比较麻烦,后来经过查找在stackoverflow上找到了解决方法,将脚本记录如...
  • panda_bear
  • panda_bear
  • 2012年10月10日 22:20
  • 20449

shell脚本解析XMl文件

#! /usr/bin/sh declare id declare name declare age declare sex tmp=`sed -n -e 's///p' peopl...
  • hey_a_hao
  • hey_a_hao
  • 2011年10月28日 13:38
  • 5730

shell读取脚本同一个目录下的xml格式的文件

获取当前目录的路径 用变量current_path保存,current_path=$(cd `dirname $0`;pwd) 配置文件和脚本在同一个目录下。名字叫“configure”,变量co...
  • wyhllk
  • wyhllk
  • 2016年11月05日 15:26
  • 1019

使用Linux shell(awk)读取pom.xml版本号

在maven项目中,使用pom.xml进行构建配置,maven构建完后,一般将构建好的jar或war包放置在仓库内。在进行持续集成的活动中,需要将这些编译好的包发布到其他地方,发布最简单的方法是进行文...
  • hongweigg
  • hongweigg
  • 2016年09月08日 14:36
  • 1515

linux shell 解析xml格式文本

echo "ssspage1page2ssss" | awk 'BEGIN{FS="";RS=".*/{print $NF}'page1page2
  • yshwfy
  • yshwfy
  • 2010年11月22日 23:17
  • 997

使用shell实现对xml文件的指定字段进行修改,默认替换成当时的时间戳

在进行接口测试工作的时候,经常设计到xml文件内容的修改,每个用例都要去修改xml里面的文件内容,开始使用vi编辑器频繁修改,非常耗时间,后面使用sed进行替换,有一定的优化,但是在时间戳替换上面还不...
  • g695144224
  • g695144224
  • 2016年06月13日 09:28
  • 1656

c#(.Net)解析xml

//方法1             XmlDocument xmlDoc = new XmlDocument();             xmlDoc.LoadXml("11kkkk");     ...
  • lanshengsheng2012
  • lanshengsheng2012
  • 2014年03月17日 10:09
  • 11815

深入解读XML解析

一、XML是什么?有什么用? XML是指可扩展标记语言(eXtensible MarkupLanguage),它是一种标记语言。它被设计的宗旨是描述数据(XML),而非显示数据(HTML)。   目...
  • sdksdk0
  • sdksdk0
  • 2016年02月26日 20:42
  • 20525

JavaScript解析XML,js解析xml字符串

JavaScript解析XML,js解析xml字符串
  • github_36885144
  • github_36885144
  • 2016年12月06日 16:54
  • 6905
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:shell 解析xml
举报原因:
原因补充:

(最多只允许输入30个字)