使用 xmllint 在 bash 中解析具有多个属性的 XML

Parse XML with multiple attribute in bash using xmllint

我是 XML 解析 bash 的新手,我想解析下面的 xml 以获取 ident、host 和 username 属性的值。

<config>
   <connectionstring>
         <ftpconfig ident="testftp" host="ftphost" username="456def" password="abc123" localdir="/local/dir/test" />
   </connectionstring>
</config>

到目前为止,我可以使用 xmllint 获取单个属性的值。但是,这就是我想要实现的。

第一。使用 ident 属性获取主机值。 --> 我是用这个实现的。

hostv=$(echo 'cat /config/connectionstring/ftpconfig[@ident="testftp"]/@host' | xmllint --shell myxml.xml | awk -F\" '/=/ { print ; }')

第二。使用 ident 和主机属性获取用户名值 --> 这就是我被卡住的地方。我尝试了如下不同的方法。

userv=$(echo 'cat /config/connectionstring/ftpconfig[@ident="testftp"]/@host=\""$hostv"\"/@username' | xmllint --shell myxml.xml | awk -F\" '/=/ { print ; }')

在此先感谢您的帮助。

这个呢?

xmllint --xpath '/config/connectionstring/ftpconfig[@ident="testftp" and @host="ftphost"]/@username' myxml.xml
 username="456def"

要仅获取 username 属性的值,您可以使用 string():

xmllint --xpath 'string(/config/connectionstring/ftpconfig[@ident="testftp" and @host="ftphost"]/@username)' file.xml
456def