2012-04-13 93 views
0

在shell脚本(Linux,庆典,#/ bin/sh的!)我有一个包含这样的XML数据的变量:让当shell脚本,解析XML片断

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

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

+1

http://stackoverflow.com/questions/335250/parsing-xml-with-regex-in-java的 – gyorgyabraham 2012-04-13 09:33:42

+0

可能重复[如何猛砸解析XML?(HTTP://计算器.com/questions/893585/how-to-parse-xml-in-bash) – bitmask 2012-04-13 09:47:18

回答

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 
+0

谢谢,效果很好! – gyorgyabraham 2012-04-13 09:56:45

1

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

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

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

How to parse XML using shellscript?

  • 这是真的很有帮助

而这必须在内容有所了解。

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