`

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
    分享到:
    评论

    相关推荐

      利用Shell解析处理XML的方法汇总

      总结来说,Shell解析处理XML的方法虽不及Python或Ruby等脚本语言灵活,但对于简单的任务和快速原型开发,它们提供了便利且高效的选择。熟练掌握`xmllint`、`xpath`和`xml2`的用法,可以提高系统管理员和开发者在日常...

      shell解析json源码

      shell 通过正则、换行、替换等原生态命令 实现 万能解析 json xml sql语句和一切有规则的文本。 在shll里面设置数组来实现自定义提取所需字段 主要是正则的运用,比如:arr[$ar]=$(echo $L | sed 's/\(.*\)"'"$ar"'...

      sftp定时下载,并解析xml

      本话题将深入探讨如何利用SFTP进行定时下载以及解析XML文件的过程。 首先,我们要理解SFTP的基本操作。SFTP提供了对远程文件系统的访问,包括上传、下载、列出目录、重命名和删除文件等。为了实现定时下载,我们...

      Javascript解析xml文件及SSH实现登录构建结构树例子

      JavaScript是Web开发中不可或缺的一部分,尤其在前端领域,它提供了丰富的功能来处理各种任务,包括解析XML文件。XML(eXtensible Markup Language)是一种数据交换格式,常用于存储和传输结构化数据。在JavaScript...

      SFTp上传下载and xml解析丶生成

      在你的项目中,你可能已经结合了这些技术,实现了SFTP的文件传输和XML的解析与生成功能。这样的工具对于处理服务器上的文件,特别是当需要在不同系统间交换结构化数据时,非常实用。记得在使用过程中,要确保代码的...

      XML解析示例项目-读取并输出xml的指定内容示例

      这是一个使用TinyXML进行xml文件解析的测试项目,测试了对xml文件中指定内容的读取功能。该项目演示了TinyXML的引入与使用,适合于首次接触xml解析的初学者。(这是自己第一次接触xml解析,所以仅涉及几个基本函数的...

      shell生成简单格式的xml实例

      XML(Extensible Markup Language)是一种数据交换和存储的标准,它具有自描述性,结构清晰,易于解析。以下我们将详细解释这个Shell脚本的工作原理及其相关知识点。 首先,我们来看`create_xml.sh`脚本,它是生成...

      SQL Server中读取XML文件的简单做法

      `OPENXML`函数本身接收三个参数:`idoc`是`sp_xml_preparedocument`返回的句柄,`rowpattern`是XPath表达式,用于指定要提取的XML数据,`flags`则用于控制解析行为。`OPENXML`返回的结果集可以与SQL语句结合,执行...

      java解析读取excel,word,txt,xml,json等jar包

      支持excel2003,2007的解析读取,可指定sheet页读取,指定行开始读取,过滤空行,指定列读取,过滤空单元格,支持json文件的解析读取,支持word文件的解析读取,txt文件等等,需要API文档可私信本人

      SAX解析网络编程

      3. **解析XML**: 使用解析器的`parse()`方法,传入XML数据源(如文件路径或输入流)和之前创建的事件处理器。 4. **处理事件**: 当解析器遇到XML文档的各个部分时,会调用事件处理器相应的方法。在这些方法中,你...

      shell.dat生成专用器

      这可能涉及到文本解析技术,例如正则表达式或者XML/JSON解析库。 7. **程序自动化**:shell.dat生成器的使用可以极大地简化复杂的自动化任务。例如,它可以用于批量处理文件、定时执行任务或者自定义程序的启动行为...

      基于Java、Shell和Python语言的rocketmq设计源码阅读解析

      本项目深入解析了基于Java、Shell和Python语言的RocketMQ设计源码,总计包含1281个文件,其中包括1063个Java源文件、66个Markdown文档、32个XML配置文件、26个PNG图片文件、20个YAML配置文件、18个Shell脚本文件、11...

      nmap_magic:将 nmap XML 输出的命令行处理为更可用的 tsv 格式文件

      脚本将解析XML文件,提取关键信息,如目标IP地址、开放端口、服务标识等,并将这些信息整理成TSV格式。这样,你可以快速地查看哪些主机是活动的,它们正在运行哪些服务,以及这些服务可能存在的漏洞。 标签 "Shell...

      将数据库的表生成XML文件

      XML(eXtensible Markup Language)是一种通用的数据交换格式,因其结构化、平台独立性以及易于解析的特性,常用于存储和传输数据。本教程将详细讲解如何将数据库的表转换为XML文件,以便于数据共享、备份或跨系统...

      解析器:用纯POSIX shellscript编写的CSV,JSON,XML文本解析器和生成器

      本文将深入探讨一个特别的实现——使用纯POSIX Shell脚本编写的CSV、JSON、XML解析器和生成器。这样的工具具有轻量级、跨平台和易部署的优势,对于那些在Unix环境中工作且不希望依赖复杂语言的开发者来说,非常实用...

      将SQL数据库表转换成XML文件输出(脚本)

      此外,还可以通过BCP命令结合`xp_cmdshell`存储过程来实现将XML数据导出到文件的功能。这种方式不仅能够高效地处理大量数据,还能保证数据的准确无误。 #### 实现步骤 1. **配置环境**:为了能够使用`xp_cmdshell`...

      Visual C++ Windows Shell Programming

      除了Visual C++和Windows Shell本身的知识,本书还可能涵盖了其他相关技术,如ASP.NET、C#、Java、Perl和XML等。这些技术虽然不直接关联于Windows Shell编程,但在现代软件开发中扮演着重要的角色,尤其是当涉及到...

      基于Java与Shell语言的boot项目设计源码及A股交易所行情解析核心片段

      该项目为2016-2017年间开发的基于Java与Shell语言的Boot项目,总计包含61个文件,其中包括42个Java源文件、9个XML配置文件、4个属性文件、1个Git忽略文件、1个Markdown文件、1个文本文件、1个临时文件、1个批处理...

    Global site tag (gtag.js) - Google Analytics