shell - 使用xmllint从属性获取值

我想获取名称的值,并且使用xmllint将它放入变量中,


<body>
<value name="abc"></value>
</body>

echo 'cat //body/value/@name' | xmllint --shell"test.xml"

/ > -------
 name="abc"
/ > 

想将值"abc"赋给变量$test

时间:


test=$(xmllint --xpath"string(//body/value/@name)" test.xml)

试试这个,它不漂亮,但它很有用:),


test=$(echo 'cat //body/value/@name' | xmllint --shell"test.xml" | grep -v">" | cut -f 2 -d"=" | tr -d"); 
echo $test

在Ubuntu 12.04和Solaris 11上测试过:


getxml() { # $1 = xml file, $2 = xpath expression
 echo"cat $2" | xmllint --shell $1 |
 sed -n 's/[^"]*"([^"]*)"[^"]*/1/gp'
}

例如,从glassfish域配置中提取实例名称:


$ getxml /tmp/test.xml"//server[@node-ref]/@name"
inst1
inst2

...