使用 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
我是 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