Shell脚本,解析XML片段

时间:2012-04-13 09:31:03

标签: xml linux bash sh

在shell脚本(Linux,bash,#!/ bin / sh)中,我有一个包含XML数据的变量,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<interface>
    <objects retrieved="0" total="0"/>
</interface>

获取此数据时已经完成了一些错误处理,请关注实际问题。 问题是:简单/有效地读取“对象”元素的属性数据(命名为“已检索”)。它可以是0或1.(没有别的)。 我想我有两个选择:正则表达式和一些外部程序的XML解析。但我应该选择哪一个? 提前谢谢。

3 个答案:

答案 0 :(得分:1)

您可以使用xmlstarlet获取attr:

$ xmlstarlet sel -t -m //objects -v @retrieved input.xml
0

或者

$ xmlstarlet sel -t -m //objects/@retrieved -v . input.xml

-m or --match <xpath>     - match XPATH expression
-v or --value-of <xpath>  - print value of XPATH expression

答案 1 :(得分:1)

两者都是不错的选择,如果你想严格选择你的脚本应该独立于外部程序,我认为使用正则表达式会更好。使用正则表达式可以使程序功能比使用外部程序更快。

但是使用正则表达式并不总是一个可行的选项,特别是当你的时间较少时,你正在制作的正则表达式很复杂。外部程序只是一个选项。如果您计划将此脚本移动到另一台计算机,则此外部程序可能会导致依赖性或开销。

我会建议正则表达式。 这些可能对你有帮助。看一看。

How to parse XML using shellscript?

  • 这真的很有用

这在内容中有一些想法。

http://silveiraneto.net/2010/05/13/substitution-on-a-xml-file-shell-script-snippet/

答案 2 :(得分:0)

这是一个将XML名称 - 值对和属性转换为bash变量的函数。

http://www.humbug.in/2010/parse-simple-xml-files-using-bash-extract-name-value-pairs-and-attributes/