在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解析。但我应该选择哪一个? 提前谢谢。
答案 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/