利用Shell解析处理XML的方法汇总
在Shell下解析XML文件有多种方法,这里对一些常用的做一个汇总。以下所有示例都基于以下的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
with XML.</description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<price>5.95</price>
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
</catalog>
使用grep和正则表达式解析XML
我们可以利用 grep 命令和正则表达式来解析 XML 文件中指定标签中的内容。下面的命令可以提取所有 author
标签中的内容:
$ grep '<author>.*</author>' example.xml | sed -e 's#<author>\(.*\)</author>#\1#'
Gambardella, Matthew
Ralls, Kim
其中 grep
命令根据正则表达式提取了所有 <author>
标签中的内容,然后使用 sed
命令删除了标签。
使用xmlstarlet解析XML
可以利用 xmlstarlet 解析 XML 文件。xmlstarlet 是一个命令行工具,可以用于检查、查询、编辑和根据 XML 文件创建命令行策略。
- 使用以下命令可以打印出所有
author
标签的内容:
$ xmlstarlet sel -t -m "//author" -v . -n example.xml
Gambardella, Matthew
Ralls, Kim
其中 sel
命令表示查询(select)模式, -t
参数表示模板(template)模式, -m
参数表示匹配模式, //author
表示匹配所有 author
标签, -v .
表示输出标签中的内容, -n
表示输出后换行。
- 使用以下命令可以打印出所有
book
标签中id
属性值为bk102
的title
和price
标签的内容:
$ xmlstarlet sel -t -m "//book[@id='bk102']" -v title -n -v price -n example.xml
Midnight Rain
5.95
其中 [@id='bk102']
表示匹配 id
属性值为 bk102
的 book
标签,-v
参数可以指定要输出的标签, -n
表示输出后换行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Shell解析处理XML的方法汇总 - Python技术站