使用bash脚本中的属性解析XML元素

时间:2016-05-20 00:21:29

标签: bash xml-parsing

我想在bash脚本中解析下面的xml文本。

<os name="RedHat" os_version="6">
<package_manager type="name">rpm</package_manager>
<multipath_package_check type="command">rpm -qa | grep device-mapper-multipath</multipath_package_check>
<mpath_service_enable type="command">chkconfig multipathd on</mpath_service_enable>
<mpath_service_restart type="command">service multipathd restart</mpath_service_restart>
</os>

例如,如果元素属性与参数匹配,我需要具有如下函数来返回文本。

get_package_manager "RedHat" "6" 

应该返回“rpm”

get_multipath_package_check "RedHat" "6" 

应返回“rpm -qa | grep device-mapper-multipath”

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

一些&#34; xml解析&#34;使用xml2apt-get install xml2)程序,使用XML的平面表示更容易。

典型地:

$ xml2 < test.xml | grep package_manager= | cut -d= -f2
rpm

$ xml2 < test.xml | grep multipath_package_check= | cut -d= -f2
rpm -qa | grep device-mapper-multipath

但它不会解决任何问题。对于您无法使用xml2轻松解决的问题,您可以尝试使用xpath表达您的查询并使用CLI中提供的任何xpath工具,例如xmllint:

$ xmllint --xpath '/os[@name="RedHat" and @os_version="6"]/package_manager/text()' test.xml
rpm

$ xmllint --xpath '/os[@name="RedHat" and @os_version="6"]/multipath_package_check[@type="command"]/text()' test.xml 
rpm -qa | grep device-mapper-multipath